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

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
<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(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>
            亚洲欧美日韩另类精品一区二区三区| 亚洲尤物在线视频观看| 久久精品国产久精国产一老狼| 欧美在线免费| 亚洲第一毛片| 欧美另类女人| 亚洲欧美一区二区激情| 久久久欧美一区二区| 亚洲激情婷婷| 国产精品久久久久久久久免费| 欧美一级免费视频| 欧美福利一区二区| 亚洲欧美日韩久久精品| 国产尤物精品| 欧美精品在线网站| 午夜精品久久久久影视| 欧美华人在线视频| 午夜国产精品影院在线观看 | 国产一区二区三区网站| 鲁鲁狠狠狠7777一区二区| 一区二区三区毛片| 久久亚洲私人国产精品va媚药| 99riav1国产精品视频| 国产三级欧美三级日产三级99| 美女网站久久| 午夜在线视频一区二区区别| 亚洲电影在线看| 性伦欧美刺激片在线观看| 在线播放不卡| 国产精品拍天天在线| 久久一区二区三区av| 亚洲午夜av| 亚洲国产成人tv| 久久久久国产精品一区| 亚洲视频免费| 亚洲欧洲在线一区| 国产私拍一区| 欧美性片在线观看| 欧美黄色免费| 老司机精品久久| 欧美在线观看你懂的| 一区二区三区四区蜜桃| 欧美激情视频一区二区三区免费| 欧美一区二区日韩一区二区| 一片黄亚洲嫩模| 亚洲激情在线| 精品88久久久久88久久久| 国产精品magnet| 麻豆国产va免费精品高清在线| 在线视频你懂得一区| 欧美高清在线精品一区| 久久久美女艺术照精彩视频福利播放 | 国产精自产拍久久久久久| 欧美日本韩国| 免费观看成人www动漫视频| 久久精品久久综合| 性欧美8khd高清极品| 亚洲午夜小视频| 99精品热视频| 亚洲免费观看高清完整版在线观看| 免费日韩av| 免费成人在线观看视频| 久久亚洲欧洲| 久久人人爽国产| 久久久久久久一区二区三区| 久久国产精品高清| 久久国产综合精品| 久久疯狂做爰流白浆xx| 久久精品成人一区二区三区| 欧美中文字幕在线| 久久不射网站| 久久蜜臀精品av| 久久亚洲综合色| 玖玖视频精品| 欧美激情麻豆| 亚洲欧洲在线观看| 99精品国产福利在线观看免费| 日韩亚洲欧美成人| 一本色道**综合亚洲精品蜜桃冫 | 亚洲精品一级| 夜夜嗨av一区二区三区四区| 一区二区三区精品久久久| 一本色道综合亚洲| 亚洲字幕在线观看| 久久精品99国产精品酒店日本| 久久精品亚洲一区| 免费在线成人av| 亚洲国产精品一区二区久| 亚洲精品日韩精品| 中文一区在线| 久久黄色小说| 欧美成人一区在线| 国产精品成人国产乱一区| 国产欧美婷婷中文| 在线免费观看一区二区三区| 亚洲精品一区二区三区樱花| 一区二区激情| 久久精品夜色噜噜亚洲aⅴ| 老司机免费视频一区二区| 欧美激情国产日韩| 一区二区三区国产在线观看| 欧美一级理论性理论a| 快播亚洲色图| 国产精品麻豆va在线播放| 国产亚洲在线观看| 亚洲精品一区在线观看| 翔田千里一区二区| 免费观看久久久4p| 亚洲视频一区| 久久一区视频| 国产精品区一区| 亚洲激情国产精品| 欧美一区二区在线| 亚洲国产黄色| 欧美一区二区视频在线观看2020| 欧美风情在线观看| 国产亚洲激情| 99精品国产在热久久| 久久久久高清| 一区二区三区日韩精品| 久久―日本道色综合久久| 国产精品免费电影| 亚洲日本va午夜在线电影| 久久精品99| 一区二区三区日韩| 欧美成人亚洲成人| 韩国三级电影一区二区| 亚洲小说欧美另类婷婷| 欧美成人在线免费观看| 亚洲视频一起| 欧美美女日韩| 最近中文字幕日韩精品| 久久久久久久综合狠狠综合| 一区二区三区蜜桃网| 欧美91精品| 在线观看国产欧美| 久久久精品动漫| 亚洲一区二区三区三| 欧美日韩国产成人在线观看| 亚洲高清av在线| 久久久久88色偷偷免费| 亚洲砖区区免费| 欧美日韩在线不卡一区| 亚洲精品欧美一区二区三区| 美女日韩在线中文字幕| 欧美在线91| 国产麻豆综合| 欧美资源在线| 性色av一区二区三区在线观看| 欧美涩涩视频| 99精品热视频只有精品10| 欧美国产成人在线| 久久亚洲综合| 在线欧美日韩国产| 美日韩精品免费观看视频| 欧美主播一区二区三区| 国产一区二区日韩精品| 久久精品毛片| 久久国产99| 黑丝一区二区三区| 麻豆精品精品国产自在97香蕉| 欧美一二三区精品| 国产一区二区三区电影在线观看| 久久九九热免费视频| 久久福利毛片| 亚洲高清久久网| 亚洲激情精品| 欧美日韩视频不卡| 亚洲女同性videos| 宅男噜噜噜66国产日韩在线观看| 欧美性大战久久久久| 午夜精品亚洲| 久久av老司机精品网站导航| 狠狠爱综合网| 欧美激情无毛| 国产精品v亚洲精品v日韩精品| 午夜精品久久久久久久蜜桃app| 亚洲自拍偷拍网址| 国产自产精品| 亚洲国产精品va在线看黑人| 欧美区在线观看| 亚洲欧美视频在线观看| 久久成人精品一区二区三区| 亚洲第一黄色| 99在线|亚洲一区二区| 国产精品亚洲一区二区三区在线| 久久久久久久精| 欧美成人按摩| 先锋影音国产精品| 久久久久国内| 这里只有精品电影| 午夜一级久久| 亚洲另类黄色| 午夜日韩视频| 亚洲精选中文字幕| 亚洲欧美久久久| 亚洲日韩视频| 午夜精品久久久99热福利| 亚洲激情小视频| 亚洲综合视频在线|