Linux 進程、線程與 exec/系統調用詳解

1. waitwaitpid —— 子進程資源回收

1.1 wait

pid_t wait(int *wstatus);

功能:阻塞等待,回收任意子進程的資源空間。

參數

? ?wstatus:保存子進程退出狀態的變量地址

? ?NULL:不保存退出狀態

返回值

????????成功:返回回收的子進程 PID

????????失敗:返回 -1

1.2 waitpid

pid_t waitpid(pid_t pid, int *status, int options);

功能:回收指定子進程的資源,功能比 wait 更靈活。

參數

pid

? ?< -1:回收指定進程組內的任意子進程例如 -100 表示等待 GID=100 的進程組

? ?-1:回收任意子進程(組內外)

? ?0:回收與當前調用者同一組的所有子進程

? ?> 0:回收指定 PID 的子進程

status

? ? ? ?保存子進程退出狀態NULL:不關心退出狀態

options

? ?0:阻塞等待WNOHANG:非阻塞等待

返回值

????????成功:返回回收的子進程 PID

????????失敗:-1

????????非阻塞模式下且沒有子進程退出:返回 0

1.3 子進程資源回收策略

  1. wait 阻塞回收:父進程專門等待子進程退出

  2. waitpid 非阻塞回收:配合輪詢實現

  3. 不回收:子進程一直運行

  4. 異步回收:子進程退出時通知父進程回收

2. exec 函數族 —— 在當前進程中執行其他程序

2.1 execl

int execl(const char *path, const char *arg, ... /* (char  *) NULL */);

功能:執行指定路徑的可執行文件。
本質:將當前進程的代碼段替換成新程序,不創建新進程。

參數

? path:可執行文件路徑

? arg:傳給程序的參數,第一個參數一般是程序名

? NULL:參數結束標志

返回值

????????成功:無返回(被新程序替換)

????????失敗:-1

2.2 execlp

int execlp(const char *file, const char *arg, ... /* (char  *) NULL */);

功能:從 PATH 環境變量指定的目錄中查找可執行文件。

2.3 execle

int execle(const char *path, const char *arg, ..., (char *) NULL, char *const envp[]);

功能:指定環境變量執行新程序。

2.4 execv

int execv(const char *path, char *const argv[]);

功能:與 execl 類似,但用 數組 傳遞參數。

2.5 execvp

int execvp(const char *file, char *const argv[]);

功能:與 execlp 類似,但用 數組 傳遞參數。

2.6 execvpe

int execvpe(const char *file, char *const argv[], char *const envp[]);

功能:結合 PATH 搜索 + 指定環境變量。

3. system —— fork + exec 封裝

int system(const char *command);

功能:調用 fork() 創建子進程,并在子進程中執行 exec 族函數。

區別

? ?exec:不創建新進程,直接替換當前進程代碼

? ?system:先 fork 再 exec,創建新的進程

4. 線程基礎

4.1 線程概念

線程:輕量級進程,是 CPU 調度的最小單位

進程:操作系統資源分配的最小單位

4.2 進程 vs 線程

特性進程線程
調度單位資源分配最小單位CPU 調度最小單位
資源消耗創建需分配獨立虛擬地址空間(0~4G)僅分配棧空間(默認 8M)
通信方式需 IPC 機制可直接共享全局變量
安全性高,地址空間隔離低,可能相互影響
創建速度較慢較快

4.3 線程創建

#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

參數

? thread:線程 ID 存放位置

? attr:線程屬性(NULL 表示默認)

? start_routine:線程入口函數

? arg:傳遞給線程入口函數的參數

返回值

????????成功:0

????????失敗:非 0

4.4 常用線程函數

pthread_self();   // 獲取當前線程 ID
pthread_exit();   // 線程主動退出
pthread_join();   // 回收線程資源

總結

wait / waitpid 用于子進程資源回收

exec 族函數用于執行新程序,不會創建新進程

system 封裝了 fork + exec

線程是輕量級進程,開銷小但安全性低

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93448.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93448.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93448.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Laravel 使用ssh鏈接遠程數據庫

1.創建ssh ssh -i ./id_rsa -N -L 13306:127.0.0.1:3306 -p 22 root***對上述代碼的解釋&#xff1a; 命令是一個SSH隧道命令&#xff0c;用于將本地端口3306轉發到遠程服務器上的3306端口。以下是命令的詳細解釋&#xff1a;# 調用SSH客戶端。 ssh # 指定用于身份驗證的私鑰文…

Python延申內容(一)

1.技術面試題 &#xff08;1&#xff09;TCP與UDP的區別是什么&#xff1f; 答&#xff1a; TCP&#xff08;傳輸控制協議&#xff09;&#xff1a;面向連接、可靠傳輸&#xff08;數據完整有序&#xff09;、流量控制、擁塞控制&#xff0c;適用于文件傳輸、網頁瀏覽等場景。 …

Java 9 新特性及具體應用

目錄 1. 模塊系統&#xff08;Jigsaw&#xff09; 2. JShell&#xff08;REPL工具&#xff09; 3. 集合工廠方法 4. 接口私有方法 5. Stream API 增強 6. HTTP/2 客戶端&#xff08;Incubator&#xff09; 7. 多版本JAR包 總結 1. 模塊系統&#xff08;Jigsaw&#xff0…

第二十五天:構造函數/析構函數/拷貝構造

構造函數/析構函數/拷貝構造 1. 構造函數&#xff08;Constructor&#xff09; 定義與作用&#xff1a;構造函數是一種特殊的成員函數&#xff0c;其名稱與類名相同&#xff0c;沒有返回類型&#xff08;包括 void 也沒有&#xff09;。它的主要作用是在創建對象時初始化對象的…

【P14 3-6 】OpenCV Python——視頻加載、攝像頭調用、視頻基本信息獲取(寬、高、幀率、總幀數),視頻保存在指定位置

文章目錄1 讀取本地視頻1.1 絕對路徑 6種方式1.2 相對路徑 4種方式1.3 讀取本地視頻2 視頻基本信息3 調用攝像頭 并將視頻保存在指定位置P14 3-6 1 讀取本地視頻 現在要讀取本地視頻“video.mp4”&#xff0c; 視頻文件“video.mp4”和playVideo.py腳本文件&#xff0c;都在…

【DL學習筆記】常用數據集總結

一、如何找數據集 paperswithcode&#xff0c;但好像沒了 AutoDL Roboflow Kaggle Hungging Face 百度飛漿PP AIStudio 二、目標檢測數據集格式 常用數據集坐標格式 MSCOCO &#xff1a; 坐標格式&#xff08;x&#xff0c;y&#xff0c;w&#xff0c;h&#xff…

19.3 Transformers量化模型極速加載指南:4倍推理加速+75%顯存節省實戰

Transformers量化模型極速加載指南:4倍推理加速+75%顯存節省實戰 實戰項目:模型量化 Transformers 兼容性配置 量化模型加載核心配置邏輯 #mermaid-svg-rDjfMigtxckLYWp3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merm…

Android 終端接入 GB28181 國標視頻平臺的完整解決方案解析

1. 引言&#xff1a;讓 Android 終端無縫融入國標視頻網絡在公安、交通、應急、工業、教育等領域&#xff0c;GB/T 28181 國標協議早已成為視頻監控與指揮調度的事實標準。傳統國標視頻網絡通常由固定部署的 IPC 攝像機、NVR、視頻管理平臺構成&#xff0c;設備形態單一。隨著一…

Docker目錄的遷移

# 遷移 docker 目錄 &#xff08;無論容器與鏡像占用空間大小&#xff0c;哪怕只占用1G&#xff0c;也需用此方式&#xff0c;否則可能遷移不成功&#xff09;service docker stopcd /var/lib/docker# 一個一個復制除 overlay2 外的其他所有文件夾cp -R builder /home/docker/l…

IOS APP 前端存儲

UserDefaults優點簡單易用提供簡單的鍵值對存儲接口無需復雜配置&#xff0c;開箱即用適合存儲少量簡單數據輕量級專門為存儲小量數據設計內存占用小性能開銷低自動持久化數據自動保存到磁盤應用重啟后數據仍然可用通過synchronize()方法可以強制立即寫入&#xff08;iOS 12已自…

在前端js中使用jsPDF或react-to-pdf生成pdf文件時,不使用默認下載,而是存儲到服務器

開源地址&#xff1a; https://github.com/ivmarcos/react-to-pdf 主要就是這個方法&#xff0c;有三種可選&#xff1a; 默認是save&#xff0c;也就是會自動觸發下載的方法&#xff0c;open方法是默認會打開一個pdf預覽的tab頁面&#xff0c;build方法就是在調用的函數gener…

會議征稿!IOP出版|第二屆人工智能、光電子學與光學技術國際研討會(AIOT2025)

往屆已EI檢索&#xff0c;歡迎投稿&#xff01; AIOT2024會后兩個月實現見刊&#xff01; AIOT2025已通過IOP-JPCS出版申請&#xff0c;獨立JPCS出版 AIOT2025已上線西安文理學院官網&#xff1a; 征文通知&#xff5c;第二屆人工智能、光電子學與光學技術國際…

CPP多線程2:多線程競爭與死鎖問題

在多線程編程中&#xff0c;多個線程協同工作能顯著提升程序效率&#xff0c;但當它們需要共享和操作同一資源時&#xff0c;潛在的問題也隨之而來&#xff1b;線程間的執行順序不確定性可能導致資源競爭&#xff0c;可能引發死鎖&#xff0c;讓程序陷入停滯。 多線程競爭問題示…

全國產飛騰d2000+復旦微690t信號處理模塊

UD VPX-404是基于高速模擬/數字采集回放、FPGA信號實時處理、CPU主控、高速SSD實時存儲架構開發的一款高度集成的信號處理組合模塊&#xff0c;采用6U VPX架構&#xff0c;模塊裝上外殼即為獨立整機&#xff0c;方便用戶二次開發。 UD VPX-404模塊的國產率可達到100%&#xff0…

物聯網 (IoT) 的頂級硬件平臺

物聯網 &#xff08;IoT&#xff09; 的頂級硬件平臺IoT&#xff08;物聯網&#xff09;不再是一個流行詞。隨著每天出現幾個鼓舞人心的用例&#xff0c;多家公司現在正在探索如何利用該技術實現業務增長。無論實施何種其他技術&#xff0c;基于物聯網的新設備正迅速成為一項重…

TCP傳輸層協議(4)

TCP應用層協議&#xff08;4&#xff09; 流量控制 接收端處理數據的速度是有限的. 如果發送端發的太快, 導致接收端的緩沖區被打滿, 這個時候如果發送端繼續發送, 就會造成丟包, 繼而引起丟包重傳等等一系列連鎖反應. 因此 TCP 支持根據接收端的處理能力, 來決定發送端的發送速…

雙向SSL認證之Apache實戰配置

防御未授權訪問&#xff0c;為企業級應用構筑雙重身份驗證防線 本文是關于Apache配置雙向SSL認證的深度技術指南&#xff0c;包含全流程操作、調試技巧及企業級解決方案&#xff0c;適用于運維工程師和安全管理員。 1.為什么需要雙向認證 &#xff1f; 核心價值 &#x1f51…

JavaScript 實用工具方法小全

1. 精確獲取小數位數/*** 獲取數字的小數位數&#xff08;支持科學計數法&#xff09;* param {number|string} num - 要檢查的數字&#xff0c;可以是數字或字符串形式* returns {number} 返回小數部分的位數* * 實現原理&#xff1a;* 1. 處理科學計數法&#xff08;如1.23e-…

【易錯題】C語言

今日遇到的易錯題 #include <stdio.h> int i;//全局變量默認初始化是0 int main() {i--;//-1if (i > sizeof(i)){printf(">\n");}else{printf("<\n");}return 0; }易錯點&#xff1a;sizeof的返回值類型實際為無符號整形&#xff0c;因此編…

第七十五章:AI的“思維操控師”:Prompt變動對潛在空間(Latent Space)的影響可視化——看懂AI的“微言大義”!

Prompt變動對潛在空間影響前言&#xff1a;AI的“思維操控師”——Prompt變動對潛在空間的影響可視化&#xff01;第一章&#xff1a;痛點直擊——Prompt“難伺候”&#xff1f;改一個字就“面目全非”&#xff01;第二章&#xff1a;AI的“思維圣地”&#xff1a;潛在空間&…