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

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 閱讀(402) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿(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>
            国产亚洲免费的视频看| 欧美日韩调教| 亚洲欧美日韩一区二区三区在线| 欧美一区二区三区四区在线| 狠狠爱综合网| 亚洲国产美国国产综合一区二区| 欧美激情一区| 午夜国产精品影院在线观看| 亚洲综合久久久久| 在线观看日韩www视频免费 | 欧美一区二区三区四区视频| 久久成人免费电影| 亚洲日本电影| 亚洲午夜视频在线| 精品不卡在线| 亚洲日本va午夜在线影院| 欧美性猛交99久久久久99按摩| 久久精品99国产精品日本| 另类激情亚洲| 亚洲一区二区少妇| 久久男人av资源网站| 一区二区三区四区国产精品| 欧美一区二区在线免费观看| 日韩视频免费观看| 欧美伊久线香蕉线新在线| 99热这里只有成人精品国产| 午夜日韩视频| 亚洲视频一二区| 老司机午夜精品视频在线观看| 亚洲深夜福利网站| 噜噜噜久久亚洲精品国产品小说| 亚洲一区在线播放| 欧美成人精品在线| 久久国产一区| 国产精品www994| 亚洲精品九九| 亚洲福利精品| 久久超碰97中文字幕| 亚洲影视九九影院在线观看| 久久综合激情| 久久久综合网| 国产精品一区二区男女羞羞无遮挡 | 亚洲国产小视频| 欧美在线关看| 香蕉亚洲视频| 欧美亚洲成人免费| 亚洲裸体俱乐部裸体舞表演av| 好看的日韩视频| 亚洲免费视频一区二区| 日韩亚洲在线| 欧美国产日韩一区| 欧美激情成人在线| 黄色综合网站| 久久精品亚洲一区二区三区浴池| 午夜在线视频一区二区区别 | 亚洲最黄网站| 亚洲天堂av在线免费观看| 免费久久久一本精品久久区| 麻豆精品网站| 亚洲福利在线看| 另类综合日韩欧美亚洲| 久久手机免费观看| 美女91精品| 在线观看中文字幕不卡| 久久久999精品免费| 久久精品欧美日韩精品| 国产亚洲一区二区在线观看 | 亚洲综合电影| 久久久久久久久久久一区 | 老司机免费视频一区二区三区 | 亚洲网站在线看| 国产精品99免视看9| 亚洲桃花岛网站| 先锋影音国产一区| 国产一区二区电影在线观看| 欧美在线观看一区| 欧美成人精品在线观看| 亚洲激情另类| 欧美日韩在线不卡一区| 亚洲视频在线一区观看| 久久精品1区| 亚洲成人原创| 欧美日韩国产一中文字不卡| 宅男66日本亚洲欧美视频| 久久不射网站| 亚洲欧洲一区| 国产精品亚洲人在线观看| 久久精品国产亚洲5555| 欧美激情影院| 欧美亚洲一区二区三区| 韩日欧美一区| 欧美电影免费观看高清完整版| 久久精品三级| 久久伊人免费视频| 国产区日韩欧美| 亚洲综合第一| 亚洲最新在线| 国产精品免费看片| 亚洲一区二区视频在线| 91久久久久久国产精品| 久久久欧美精品sm网站| 国产日韩一区| 久久精品欧美日韩| 久久国产精品99久久久久久老狼 | 在线观看日韩国产| 久久亚裔精品欧美| 蜜桃av久久久亚洲精品| 亚洲国产精品毛片| 久久久国产亚洲精品| 欧美女人交a| 欧美亚洲一区二区在线观看| 欧美激情1区2区3区| 欧美一级片久久久久久久| 日韩视频中文| 极品日韩久久| 久久一区国产| 久久精品动漫| 国产精品另类一区| 久久久福利视频| 欧美色大人视频| 久久精品日产第一区二区| 欧美一区二区视频观看视频| 亚洲精品美女| 欧美一区二区三区精品电影| 91久久久国产精品| 香蕉亚洲视频| 亚洲在线免费| 欧美全黄视频| 亚洲成人在线网| 国产性色一区二区| 99国产精品国产精品久久| 99re6热只有精品免费观看 | 国产一区 二区 三区一级| 夜夜嗨网站十八久久| 国产精品免费aⅴ片在线观看| 久久精品女人| 99热这里只有精品8| 欧美日韩直播| 久久精品综合一区| 亚洲激情网址| 久久爱www.| 亚洲精品麻豆| 狠狠88综合久久久久综合网| 免费久久99精品国产| 亚洲一区一卡| 亚洲小说区图片区| 老司机精品导航| 午夜久久电影网| 西瓜成人精品人成网站| 日韩视频在线观看| 亚洲在线成人精品| 亚洲国产精品一区制服丝袜| 亚洲一级特黄| 亚洲韩国精品一区| 欧美一级在线播放| 小处雏高清一区二区三区| 久久全球大尺度高清视频| 亚洲精品视频中文字幕| 狠狠色狠狠色综合日日tαg| 亚洲乱码国产乱码精品精可以看| 国产午夜精品理论片a级大结局| 欧美成人精品| 好吊日精品视频| 午夜精品国产| 久久精品二区亚洲w码| 国产喷白浆一区二区三区| 91久久国产综合久久91精品网站| 国产精品日日做人人爱| 日韩午夜在线电影| 亚洲免费伊人电影在线观看av| 美国三级日本三级久久99| 久久亚洲影院| 伊人久久亚洲影院| 欧美福利电影网| 99热在这里有精品免费| 欧美国产一区视频在线观看| 久久欧美中文字幕| 久久免费一区| 亚洲新中文字幕| 狠狠色狠色综合曰曰| 欧美国产日韩一区| 欧美chengren| 亚洲男人天堂2024| 国产欧美一区二区视频| 欧美一区二区成人| 欧美黄色影院| 亚洲国产婷婷香蕉久久久久久| 亚洲综合色激情五月| 亚洲在线第一页| 欧美国产精品v| 国产日韩视频| 亚洲一区二区欧美| 久久天堂av综合合色| 一区二区av| 欧美国产日本高清在线| 狠狠久久亚洲欧美| 欧美一区二区三区在线免费观看 | 国产精品你懂的在线| 亚洲激情成人网| 久久久久久网站|