91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

循化| 南丰县| 浦东新区| 旅游| 平泉县| 察哈| 新干县| 正镶白旗| 垫江县| 色达县| 阳信县| 尉犁县| 明溪县| 云阳县| 千阳县| 灯塔市| 扶沟县| 鹤峰县| 兴宁市| 双牌县| 黔江区| 衡山县| 惠水县| 黄梅县| 龙州县| 志丹县| 哈密市| 柳河县| 西平县| 杭锦后旗| 盐城市| 友谊县| 峨山| 绵竹市| 龙泉市| 奉贤区| 咸丰县| 定襄县| 云南省| 屯留县| 随州市|