亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于SIGCHLD 信號

發布時間:2020-06-26 05:21:27 來源:網絡 閱讀:1716 作者:mdd9502053669 欄目:編程語言

1.關于SIGCHLD 信號

  wait 和 waitpid函數清理僵尸進程,父進程可以阻塞等待子進程結束,也可以阻塞地查詢是否有進程結束等待清理(也就是輪詢的方式)。采用第一種方式,父進程阻塞就不能處理自己的工作了。采用第二種方式,父進程在處理自己的工作時還記得時不時輪詢一下,程序實現復雜。其實子進程在終止時會給父進程發SIGCHLD信號,該信號的默認處理是忽略。父進程可以子定義SIGCHLD函數,這樣父進程只需專心的處理自己的工作,不必關心子進程了子進程終止時會通知父進程,父進程在信號處理函數中調wait清理子進程即可。

   下面實現這樣的的一個例子:

  父進程fork出子進程,子進程調exit(1)終止,父進程自定SIGCHLD信號的處理函數,在其中調wait獲得子進程的退出狀態并打印。

  1 #include<stdio.h>
  2 #include<signal.h>
  3 #include<unistd.h>
  4 #include<stdlib.h>
  5 #include<sys/wait.h>
  6 //void handler(int sig)
  7 //{
  8 
  9   // printf("get a sig:%d\n",sig);
 10 //}
 11 
 12 void clear_child(int sig)
 13 {
 14      int status=0;
 15      while((waitpid(-1,&status,WNOHANG))>0)
 16      {
 17 
 18         printf("sig:%d,  code:%d\n",status&0xff,(status>>8)&0xff);
 19       }
 20 }
 21 
 22 int main()
 23 {
 24 
 25   pid_t pid=fork();
 26   if(pid<0)
 27    {
 28      printf("fork failed.....\n");
 29    }
 30   else if(pid==0)
 31   {
 32     sleep(10);
 33     printf("child is quit!...\n");
 34     exit(2);
 35    }
 36   else
 37    {
 38     signal(SIGCHLD,clear_child);
 39     printf("father start to wait...\n");
 40    while(1)
 41 
 42    {;}
 43    }
 44    return 0;

程序運行結果:

關于SIGCHLD 信號

分析:

   父打印10秒之后子打印,并且拿到子進程的退出碼。這樣的話父進程就可以專心處理自己的工作。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽阳县| 庐江县| 石景山区| 四川省| 泰来县| 大理市| 隆德县| 白城市| 中西区| 洛扎县| 绥德县| 花莲市| 本溪| 沿河| 赫章县| 广东省| 茌平县| 开远市| 右玉县| 治多县| 朝阳县| 乾安县| 开阳县| 神木县| 安国市| 全椒县| 呼图壁县| 南充市| 炎陵县| 株洲市| 从江县| 丽水市| 称多县| 卓资县| 淮安市| 徐水县| 琼结县| 喀什市| 天峨县| 霍林郭勒市| 兰考县|