中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

關于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

崇信县| 乐山市| 博爱县| 唐山市| 浦东新区| 宿迁市| 寿宁县| 呼和浩特市| 新干县| 龙岩市| 中卫市| 常宁市| 邯郸市| 句容市| 苍梧县| 军事| 威宁| 台东县| 乐清市| 汝城县| 蒙山县| 绵竹市| 麻江县| 金塔县| 眉山市| 五华县| 栖霞市| 青冈县| 新巴尔虎右旗| 佛山市| 新余市| 镇赉县| 汨罗市| 乌苏市| 贵南县| 广饶县| 黄浦区| 响水县| 普安县| 绥阳县| 屏山县|