日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 父进程 子进程 回收,回收 fork() 的子进程

發布時間:2025/3/20 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 父进程 子进程 回收,回收 fork() 的子进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

8種機械鍵盤軸體對比

本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?

使用 fork() 函數派生出多個子進程來并行執行程序的不同代碼塊,是一種常用的編程泛型。但是,在使用 fork() 函數時若處理不當,很容易產生僵尸進程。

fork()#include

#include

int main(int argc, char **argv) {

while (1) {

pid_t pid = fork();

if (pid > 0) {

// 主進程

sleep(5);

} else if (pid == 0) {

// 子進程

return 0;

} else {

fprintf(stderr, "fork errorn");

return 2;

}

}

}

該函數的返回值有三種情況,分別是:大于 0,表示當前進程為父進程,返回值是子進程號;

等于 0,表示當前進程是子進程;

小于 0(確切地說是等于 -1),表示 fork() 調用失敗。

示例代碼每 5 秒創建一個子進程,而且沒有等待回收,變成僵尸進程$ gcc test.c -o fork

$ ./fork

kk 24336 17551 0 11:16 pts/6 00:00:00 ./fork

kk 24337 24336 0 11:16 pts/6 00:00:00 [fork]

kk 24340 24336 0 11:16 pts/6 00:00:00 [fork]

kk 24345 24336 0 11:16 pts/6 00:00:00 [fork]

僵尸進程

僵尸進程是指子進程退出后,它的父進程沒有“等待”該子進程,這樣的子進程就會成為僵尸進程。

一般父進程需要調用 wait 或 waitpid 來等待子進程進行回收

wait

waitpid

SIGCHLD

在 SIGCHLD 中調用 wait 或 waitpid

SIG_IGN

除了在 SIGCHLD 信號處理函數中調用 wait() 來避免產生僵尸進程,我們還可以選擇忽略 SIGCHLD 信號,告知操作系統父進程不關心子進程的退出狀態,可以直接清理。signal(SIGCHLD, SIG_IGN);

但需要注意的是,在部分 BSD 系統中,這種做法仍會產生僵尸進程。因此更為通用的方法還是使用 wait() 函數。

需要區分僵尸進程和孤兒進程

Ref

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Linux 父进程 子进程 回收,回收 fork() 的子进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。