linux進程利用SIGCHLD信號,來實現父進程回收子進程

子進程執行完畢后,會向父進程發出 SIGCHLD信號 , 這段代碼實現的就是i,父進程接受到子進程 發出的SIGCHLD信號,實現對子進程進行回收,從而避免僵尸進程

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <signal.h>
#include <sys/wait.h>void catch(int sigNum) {pid_t wpid;// 這里之所以寫成while循環的方式, // 是為了應對當多個子進程——同時——發出SIGCHLD信號的時候,主進程能夠// 將所有發出SIGCHLD信號的子進程回收掉while( (wpid = waitpid(-1, NULL, WNOHANG)) > 0) {printf("father wait son pid is %d\n", wpid);}
}int main() {// 因為主進程 在注冊 SIGCHLD信號處理的時候,子進程可能已經執行//完畢,子進程發出SIGCHLD信號的時候,早于主進程對SIGCHLD處理的注冊// 這時候首先 在主進程 ,設置 SIGCHLD為屏蔽信號(屏蔽信號集),這樣就影響了// 主進程的未決信號集,使主進程的未決信號集,SIGCHLD對應的位置為1,sigset_t myset, oldset;sigemptyset(&myset);sigaddset(&myset, SIGCHLD);sigprocmask(SIG_BLOCK, &myset, &oldset);pid_t pid;int i;for(i=0; i<10; ++i) {pid = fork();if(pid == 0) {break;}}if(i == 10) {// father// 模擬先讓子進程執行完畢,主進程再注冊 SIGCHLD信號處理函數sleep(2);struct sigaction act;act.sa_flags = 0;sigemptyset(&act.sa_mask);act.sa_handler = catch;sigaction(SIGCHLD, &act, NULL);// 當主進程注冊了 SIGCHLD的時候,將屏蔽信號集恢復,// 進而 ,主進程的未決信號集,SIGCHLD的那個,也會處理, 由1變為0,從而觸發 處理函數,回收子進程sigprocmask(SIG_SETMASK, &oldset, NULL);while (1) {sleep(1);}} else if(i < 10) {// sonprintf("I am son process pid is %d\n", getpid());}return 0;
}

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

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

相關文章

WWW軟件全球使用排名

https://w3techs.com/technologies/overview/web_server/all Apache份額一直下降呀&#xff01;

軟件工程學習筆記《四》需求分析

文章目錄軟件工程學習筆記《目錄》需求工程師當代的需求工程師需要具備的能力當代的需求工程師需要努力的方向當代的需求工程師需要注意的錯誤需求的定義需求目標需求分析的實質需求分析的關鍵應該涵蓋的內容&#xff1f;需求規約&#xff08;作為較客觀的參照&#xff09;單個…

linux守護進程

先了解 linux系統中 會話的概念 會話是進程組的更高一級&#xff0c;多個進程組對應一個會話。 會話是一個或多個進程組的集合 創建一個會話需要注意以下5點事項&#xff1a; a. 調用進程不能是進程組組長&#xff0c; 該進程變成新會話首進程&#xff08;session header&#…

python3爬蟲學習筆記

文章目錄python3的文本處理jieba庫的使用統計hamlet.txt文本中高頻詞的個數統計三國演義任務高頻次數爬蟲爬取百度首頁爬取京東某手機頁面BeautifulSoup使用request進行爬取&#xff0c;在使用 BeautifulSoup進行處理&#xff01;擁有一個更好的排版BeautifulSoup爬取百度首頁原…

linux 線程學習初步01

線程的概念 進程與線程內核實現 通過函數clone實現的 ps -Lf pidLinux內核線程實現原理 同一個進程下的線程&#xff0c;共享該進程的內存區&#xff0c; 但是只有stack區域不共享。 線程共享資源 a.文件描述符表 b.每種信號的處理方式 c.當前工作目錄 d.用戶id和組id 線程…

python3字符串處理,高效切片

高級技巧&#xff1a;切片&#xff0c;迭代&#xff0c;列表&#xff0c;生成器 切片 L [Hello, World, !]print("-------1.一個一個取-------") print(L[0]) print(L[1]) print(L[2])print("-------2.開辟一個新列表把內容存進去-------") r [] for i…

linux線程學習初步02

殺死線程的函數 int pthread_cancel(pthread_t thread); 參數介紹&#xff1a;需要輸入的tid 返回值&#xff1a;識別返回 errno成功返回 0 被殺死的線程&#xff0c;退出狀態值為一個 #define PTHREAD_CANCELED((void *)-1)代碼案例&#xff1a; #include <stdio.h> #…

python的文件基本操作和文件指針

讀寫模式的基本操作 https://www.cnblogs.com/c-x-m/articles/7756498.html r,w,a r只讀模式【默認模式&#xff0c;文件必須存在&#xff0c;不存在則拋出異常】w只寫模式【不可讀&#xff1b;不存在則創建&#xff1b;存在則清空內容】a之追加寫模式【不可讀&#xff1b;不…

python3 將unicode轉中文

decrypted_str.encode(utf-8).decode(unicode_escape)

HTTP菜鳥教程速查手冊

HTTP協議&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是因特網上應用最為廣泛的一種網絡傳輸協議&#xff0c;所有的WWW文件都必須遵守這個標準。 HTTP是一個基于TCP/IP通信協議來傳遞數據&#xff08;HTML 文件, 圖片文件, 查詢結果等&am…

mysql學習筆記01-創建數據庫

創建數據庫&#xff1a; 校驗規則&#xff1a;是指表的排序規則和查詢時候的規則 utf8_general_ci 支持中文&#xff0c; 且不區分大小寫 utf8_bin 支持中文&#xff0c; 區分大小寫 比如&#xff1a; create database db3 character set utf8 collate utf8_general_ci; &…

python的Web編程

首先看一下效果 完整代碼 import socket from multiprocessing import ProcessHTML_ROOT_DIR ""def handle_client(client_socket):request_data client_socket.recv(1024)print("request data:", request_data)response_start_line "HTTP/1.0 20…

mysql 學習筆記 02創建表

表結構的創建 比如&#xff1a; create table userinfo (id int unsigned comment id號name varchar(60) comment 用戶名password char(32),birthday date ) character set utf8 engine MyISAM;comment 表示注釋的意思 不同的存儲引擎&#xff0c;創建的表的文件不一樣

mysql 學習筆記03 常用數據類型

數值類型&#xff1a; a. 整數類型&#xff1a; 注意事項&#xff1a; 舉例&#xff1a;某個整型字段 &#xff0c;不為空&#xff0c;且有默認值 create table test (age int unisigned not null default 1);zerofill的使用 b. bit類型的使用 c.小數類型 小數類型占用…

VMware的虛擬機連不上網

1.如果你發現在VMware下運行的虛擬機無法連接網絡&#xff0c;那下面的方法也許可以幫 到你。&#xff08;前提是你的物理網絡是通的&#xff09; 第一步&#xff1a;在VMware界面下 單擊“編輯“→”虛擬網絡編輯器” 第二步&#xff1a;單擊”更改設置” 獲取權限&#xff…

python三國演義人物出場統計

完整代碼 開源代碼 統計三國演義人物高頻次數 #!/usr/bin/env python # codingutf-8 #e10.4CalThreeKingdoms.py import jieba excludes {"來到","人馬","領兵","將軍","卻說","荊州","二人","…

mysql 學習筆記03修改表以及其他操作

首先創建一張表 在現有表的結構上增加字段 alter table users add image varchar(100) not null defalut comment 圖片路徑;修改某個字段的長度 alter table users modify job vachar(60) not null comment 工作;刪除某個字段 刪除sex這個字段 alter table users drop se…

統計哈姆雷特文本中高頻詞的個數

統計哈姆雷特文本中高頻詞的個數 三國演義人物出場統計 開源代碼 講解視頻 kouubuntu:~/python$ cat ClaHamlet.py #!/usr/bin/env python # codingutf-8#e10.1CalHamlet.py def getText():txt open("hamlet.txt", "r").read()txt txt.lower()for ch…

mysql 學習筆記04 insert與update語句

1.插入數據 注意事項&#xff1a; 字符和日期類型&#xff0c; 要用 單引號 括起來 insert into (), (), () 例如&#xff1a; insert into goods values(1, abc, 2.2), (2, def, 3.3);這種形式添加多條記錄 insert 語句&#xff0c;如果沒有指定字段名&#xff0c;則values …