青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0

轉載請注明:http://www.coder4.com/index.php /archives/151

首先特別感謝這篇文章給的啟發!
http://hi.baidu.com/%D3%EA%BA%E7%D1%F4/blog/item/6490202aaba49193023bf633.html
對原作者表示敬意和膜拜!

fork()之后,非阻塞(異步)等待子進程(回收僵尸)。
fork()之后,子進程和父進程分叉執行,僵尸進程的產生是因為父進程沒有給子進程“收尸”造成的,又可以根據危害程度分為下述兩類:
總體來說:當子進程結束之后,但父進程未結束之前,子進程將成為僵尸進程。
(1)當子進程結束之后,但父進程未結束之前,子進程將成為僵尸進程,父進程結束后僵尸被init進程回收。
(2)如果子進程結束了,但是父進程始終沒有結束,那么這個僵尸將一直存在,而且隨著exec,僵尸越來越多。
如下面的代碼,在父進程執行的5s內,子進程將為僵尸:

1 /*
2  * main.cc
3  *
4  *  Created on: 2009-12-3
5  *      Author: liheyuan
6  *    Describe:
7  *
8  *   Last Date: 2009-12-3
9  *   CopyRight: 2009 @ ICT LiHeyuan
10  */
11  
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <signal.h>
15 #include <unistd.h>
16  
17 int main() {
18     //子進程的pid
19     int c_pid;
20     int pid;
21  
22     if ((pid = fork())) {
23         //父進程
24         c_pid = pid;
25         printf("The child process is %d\n", c_pid);
26         sleep(5);
27         exit(0);
28     } else {
29         //子進程
30         printf("I 'm a child.\n");
31         exit(0);
32     }
33 }

如上面的代碼,在父進程的5s內,子進程一直是僵尸!
因此,需要對僵尸進程進行回收,傳統的回收方法是,使用wait()函數,等待子進程,wait()是阻塞模式的,當子進程沒有結束之前,wait一直等 待,不往下面的語句執行。

1 /*
2  * main.cc
3  *
4  *  Created on: 2009-12-3
5  *      Author: liheyuan
6  *    Describe:
7  *
8  *   Last Date: 2009-12-3
9  *   CopyRight: 2009 @ ICT LiHeyuan
10  */
11  
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <signal.h>
15 #include <unistd.h>
16 #include <sys/wait.h>
17  
18 int main() {
19     //子進程的pid
20     int c_pid;
21     int pid;
22  
23     if ((pid = fork())) {
24         //父進程
25         c_pid = pid;
26         printf("The child process is %d\n", c_pid);
27         //阻塞等待子進程
28         int status;
29         if ((pid = wait(&status)) != -1 && pid == c_pid) {
30             //成功回收子進程
31             printf("The child exit with %d\n", WEXITSTATUS(status));
32             fflush(stdin);
33         } else {
34             printf("wait() fail.\n");
35         }
36         printf("Now , The child has been exit , and I will sleep.\n");
37         sleep(20);
38         exit(0);
39     } else {
40         //子進程
41         printf("I 'm a child.\n");
42         sleep(5);
43         exit(0);
44     }
45 }

轉載自:4號程序員

如上面的代碼,在子進程執行5秒后,即被回收,在夫進程的20秒內,子進程已經被結束,不再是僵尸。
但是這種利用wait()阻塞等待的方法也有一定的缺陷,那就是父進程必須等待子進程,無法做其他事情,如何非阻塞的等待子進程呢?
man wait,查看NOTES章節,可以找到:
子進程退出的時候,會發送SIGCHLD信號,默認的POSIX不響應,所以,我們只需要把處理SIGCHLD的函數自己實現就OK了,怎么作呢?
signal用于設置處理信號量的規則(或跳轉到的函數)

1 signal(SIGCHLD,handler);
2 void handler(int num)
3 {
4     //我接受到了SIGCHLD的信號啦
5     int status;
6     int pid = waitpid(-1,&status,WNOHANG);
7     if(WIFEXITED(status))
8     {
9         printf("The child exit with code %d",WEXITSTATUS(status));
10     }
11 }

 

OK,全部代碼如下,注意父進程不要再用wait阻塞啦!

1 /*
2  * main.cc
3  *
4  *  Created on: 2009-12-3
5  *      Author: liheyuan
6  *    Describe:
7  *
8  *   Last Date: 2009-12-3
9  *   CopyRight: 2009 @ ICT LiHeyuan
10  */
11  
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <signal.h>
15 #include <unistd.h>
16 #include <sys/wait.h>
17  
18 void handler(int num) {
19     //我接受到了SIGCHLD的信號啦
20     int status;
21     int pid = waitpid(-1, &status, WNOHANG);
22     if (WIFEXITED(status)) {
23         printf("The child %d exit with code %d\n", pid, WEXITSTATUS(status));
24     }
25 }
26  
27 int main() {
28     //子進程的pid
29     int c_pid;
30     int pid;
31  
32     signal(SIGCHLD, handler);
33  
34     if ((pid = fork())) {
35         //父進程
36         c_pid = pid;
37         printf("The child process is %d\n", c_pid);
38  
39         //父進程不用等待,做自己的事 情吧~
40         for (int i = 0; i < 10; i++) {
41             printf("Do parent things.\n");
42             sleep(1);
43         }
44  
45         exit(0);
46     } else {
47         //子進程
48         printf("I 'm a child.\n");
49         sleep(2);
50         exit(0);
51     }
52 }


posted on 2010-03-30 11:27 chatler 閱讀(406) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲黄色一区| 欧美久久99| 日韩一级网站| 国产亚洲一区在线播放| 亚洲私人影院| 99精品视频免费观看| 欧美高清视频| 亚洲国产日韩在线| 一区二区三区www| 欧美日韩综合视频网址| 久久亚洲私人国产精品va| 女人天堂亚洲aⅴ在线观看| 久久成人免费| 欧美午夜精品久久久久久久| 免播放器亚洲一区| 国产亚洲激情在线| 亚洲一区二区三区影院| 亚洲一级在线| 欧美日韩三级| 日韩一本二本av| 日韩一级裸体免费视频| 欧美激情1区2区3区| 欧美福利视频网站| 在线观看欧美| 久久躁狠狠躁夜夜爽| 久久久综合网站| 韩国欧美国产1区| 久久爱www.| 美女日韩在线中文字幕| 国产中文一区二区三区| 久久国产加勒比精品无码| 久久精品官网| 黄色成人91| 久久久五月婷婷| 欧美激情视频在线播放| 亚洲韩国精品一区| 欧美电影免费观看| 亚洲精品久久视频| 亚洲在线观看视频| 国内精品视频在线播放| 久久青草欧美一区二区三区| 欧美高清在线一区| 亚洲精品资源| 国产精品久久久久av| 午夜久久美女| 欧美国产日韩精品| 国产精品99久久久久久人| 国产精品亚洲激情| 久久久www成人免费无遮挡大片| 免费在线观看成人av| 亚洲精品一区在线观看香蕉| 欧美日韩在线精品| 欧美影院一区| 亚洲精品欧美专区| 午夜亚洲性色福利视频| 一区二区在线看| 欧美激情小视频| 亚洲欧美一区二区三区在线| 欧美+日本+国产+在线a∨观看| 夜夜精品视频| 国内精品美女在线观看| 欧美大片免费观看| 亚洲一卡久久| 亚洲高清不卡av| 欧美亚洲在线播放| 亚洲电影免费观看高清完整版在线| 欧美久久久久| 欧美一区二区视频免费观看 | 亚洲乱码国产乱码精品精可以看 | 国产一区深夜福利| 欧美成人午夜| 欧美一级久久| 日韩写真视频在线观看| 美女视频一区免费观看| 亚洲一二区在线| 亚洲第一级黄色片| 国产精品视频观看| 欧美人与性动交α欧美精品济南到| 国产精品99久久久久久久久 | 亚洲色图在线视频| 亚洲大片免费看| 久久精品国产综合精品| 亚洲一区在线播放| 亚洲精品国产精品久久清纯直播 | 亚洲欧洲另类| 久久久999成人| 亚洲婷婷综合色高清在线| 亚洲大片免费看| 国产日本亚洲高清| 欧美新色视频| 欧美高清视频在线观看| 久久免费视频网| 欧美一区二区在线看| 亚洲视频碰碰| 99视频超级精品| 亚洲毛片在线看| 亚洲国产精品一区二区第四页av| 久久亚洲美女| 久久精品夜色噜噜亚洲a∨| 亚洲自拍都市欧美小说| 亚洲少妇自拍| 国产精品99久久久久久久久久久久| 亚洲日本理论电影| 亚洲精品韩国| 亚洲美女啪啪| 日韩视频二区| 一区二区三区四区五区视频| 日韩一级大片在线| 日韩视频在线一区二区| 日韩一级精品| 亚洲一区二区三区欧美| 亚洲午夜精品一区二区三区他趣| 99在线精品视频| 亚洲一区bb| 午夜精品久久久久久久| 性刺激综合网| 久久久久久9999| 久久亚洲国产精品一区二区| 美女在线一区二区| 欧美成人精品福利| 亚洲国产成人久久综合一区| 亚洲欧洲三级| 亚洲视频二区| 欧美亚洲视频| 另类专区欧美制服同性| 欧美激情1区2区3区| 欧美日韩在线视频一区| 国产精品区一区二区三| 国产一区高清视频| 在线精品亚洲| 一区二区三区色| 欧美一区二区三区日韩| 六月婷婷一区| 亚洲激情成人| 亚洲一区二区三区视频| 欧美在线看片| 欧美激情中文不卡| 国产精品丝袜91| 伊人久久男人天堂| 一本久久a久久免费精品不卡| 亚洲欧美日本视频在线观看| 久久综合色播五月| 日韩一二三区视频| 久久精品亚洲精品| 欧美日韩午夜精品| 国产女人18毛片水18精品| 亚洲丁香婷深爱综合| 亚洲亚洲精品在线观看| 久热综合在线亚洲精品| av成人免费在线| 久久精品亚洲国产奇米99| 欧美人成网站| 影音先锋亚洲电影| 亚洲欧美在线看| 亚洲国产精品精华液2区45| 亚洲欧美精品在线观看| 欧美成人免费小视频| 国产欧美一区二区精品忘忧草| 亚洲日本中文字幕| 久久久久国产精品一区| 一区二区av在线| 欧美a级片网| 国语自产精品视频在线看抢先版结局 | 欧美大秀在线观看| 国产一区二区三区久久久久久久久| 99re6这里只有精品视频在线观看| 久久久精品日韩欧美| 中文高清一区| 欧美日本网站| 亚洲国产精品久久| 久久综合精品一区| 亚洲欧美韩国| 国产精品草草| 国产精品99久久久久久久久久久久| 久久综合伊人77777尤物| 亚洲欧美电影在线观看| 欧美日韩国产精品一卡| 亚洲激情国产精品| 男人的天堂亚洲在线| 久久精品日韩欧美| 国产综合色产| 久久久久久久久久久一区| 亚洲欧美卡通另类91av| 国产精品久久二区| 亚洲免费在线精品一区| 99国产精品99久久久久久粉嫩| 欧美韩日一区二区| 最新69国产成人精品视频免费| 麻豆精品视频在线观看| 久久精品国产综合| 伊人久久大香线蕉综合热线| 久久久噜噜噜久久中文字幕色伊伊 | 欧美自拍丝袜亚洲| 国产一区二区三区日韩欧美| 欧美在线一级视频| 欧美在线日韩| 一区二区三区在线免费播放| 猛男gaygay欧美视频| 久久夜精品va视频免费观看| 亚洲高清网站|