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

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>
            欧美黄污视频| 99视频热这里只有精品免费| 最近看过的日韩成人| 国产一区二区三区久久悠悠色av| 国产精品日韩欧美| 国产人成一区二区三区影院| 国产欧美一区二区三区久久| 韩国三级电影一区二区| 亚洲黄色视屏| 久久成人免费电影| 久久国内精品自在自线400部| 香蕉乱码成人久久天堂爱免费 | 欧美日韩一区在线视频| 国产精品国产三级国产专播品爱网| 国产精品v欧美精品v日本精品动漫| 国产精品免费一区豆花| 在线观看不卡av| 一本色道久久加勒比精品 | 女生裸体视频一区二区三区| 91久久国产综合久久蜜月精品 | 亚洲乱码国产乱码精品精| 亚洲视频1区2区| 久久本道综合色狠狠五月| 欧美成人小视频| 国产乱码精品一区二区三区av| 有坂深雪在线一区| 亚洲欧美成人网| 亚洲高清久久网| 欧美一级大片在线免费观看| 欧美jizz19hd性欧美| 国产精品综合网站| 在线视频欧美一区| 欧美成人国产一区二区| 亚洲一区黄色| 欧美日韩国产精品专区| 激情伊人五月天久久综合| 亚洲一区二区视频在线| 欧美成年人视频| 欧美一区1区三区3区公司| 欧美午夜在线一二页| 亚洲精品一区二区三区不| 久久综合999| 午夜视频一区二区| 欧美婷婷久久| 制服丝袜亚洲播放| 亚洲激情成人网| 欧美va亚洲va日韩∨a综合色| 国语对白精品一区二区| 欧美主播一区二区三区| 亚洲图片欧美午夜| 欧美日韩另类视频| 一区二区三区黄色| 亚洲精品日韩激情在线电影| 久久亚洲二区| 国产在线观看91精品一区| 久久不射2019中文字幕| 亚洲欧美另类中文字幕| 国产情人节一区| 欧美一区二区女人| 亚洲欧美在线看| 国产日韩欧美一区在线| 久久国产毛片| 久久精品国产免费观看| 欧美高清在线一区| 99精品免费| 国产精品h在线观看| 在线视频你懂得一区| 在线亚洲精品| 国产日本欧美一区二区三区| 久久av资源网| 久久久一区二区三区| 亚洲欧洲一区| 99精品99| 国产亚洲一区精品| 欧美高清一区二区| 欧美日韩一区在线观看| 欧美一级在线视频| 久久精选视频| 一本久久综合| 香蕉久久夜色精品| 亚洲第一在线综合在线| 亚洲区第一页| 国产欧美一区二区白浆黑人| 免费在线观看精品| 欧美视频精品在线| 久久综合网hezyo| 欧美日韩亚洲一区二区三区在线| 亚洲免费在线看| 久久久久免费观看| 在线亚洲国产精品网站| 欧美亚洲在线观看| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 久久综合免费视频影院| 欧美成人精品不卡视频在线观看 | 国产一区二区三区av电影| 麻豆精品在线播放| 欧美日韩高清区| 久久日韩精品| 欧美性感一类影片在线播放 | 欧美成人a视频| 国产精品久久久久国产精品日日 | 国产偷自视频区视频一区二区| 麻豆国产va免费精品高清在线| 欧美男人的天堂| 久久天天躁狠狠躁夜夜爽蜜月| 欧美日韩国产在线播放| 久久久久久网| 欧美午夜精品久久久久久人妖| 免费视频最近日韩| 国产日韩高清一区二区三区在线| 亚洲激情在线| 在线观看久久av| 欧美在线日韩| 欧美寡妇偷汉性猛交| 亚洲片在线观看| 国产欧美日韩一区二区三区| 亚洲激情在线观看视频免费| 国际精品欧美精品| 亚洲一区日韩在线| 亚洲另类在线一区| 葵司免费一区二区三区四区五区| 午夜精品福利在线观看| 欧美激情一区在线| 欧美激情综合| 亚洲国产精品va在线看黑人 | 亚洲电影观看| 在线观看日韩av| 欧美在线网站| 久久久久高清| 国产在线乱码一区二区三区| 亚洲在线视频免费观看| 午夜精品www| 国产精品私房写真福利视频| 9色国产精品| 一区二区日本视频| 欧美激情一区二区三区蜜桃视频| 欧美国产免费| 亚洲精品一品区二品区三品区| 蜜臀久久99精品久久久画质超高清| 久久色在线播放| 在线免费一区三区| 美日韩精品免费| 亚洲三级电影在线观看 | 亚洲欧美资源在线| 国产精品视频一| 欧美伊久线香蕉线新在线| 久久亚洲春色中文字幕| 在线看片成人| 欧美成人免费播放| 99精品国产99久久久久久福利| 一区二区三区欧美在线| 欧美午夜电影一区| 欧美伊人久久久久久久久影院| 久久久久久久久一区二区| 亚洲电影免费观看高清完整版在线观看 | 欧美午夜久久| 欧美在线免费观看视频| 欧美成人综合在线| 一本色道久久99精品综合| 国产精品久久婷婷六月丁香| 欧美一区二区视频在线观看2020| 免费看精品久久片| 亚洲天堂av电影| 国产真实精品久久二三区| 老司机亚洲精品| 一区二区三区av| 久久久91精品国产| 亚洲精品九九| 国产人久久人人人人爽| 麻豆乱码国产一区二区三区| 亚洲久久成人| 久久先锋影音| 亚洲综合日韩| 鲁大师影院一区二区三区| 一区二区激情视频| 国产亚洲a∨片在线观看| 久热成人在线视频| 亚洲一区二区精品在线| 欧美成人亚洲| 欧美一区二区三区四区夜夜大片 | 久久久久国产精品人| 99re热这里只有精品视频| 久久久久久久网站| 亚洲视频一区二区免费在线观看| 国产一区二区三区在线观看精品 | 欧美日韩亚洲高清一区二区| 欧美淫片网站| 在线视频一区二区| 欧美激情免费在线| 久久精品欧洲| 午夜免费在线观看精品视频| 亚洲人成在线影院| 激情久久久久| 国产亚洲欧美日韩一区二区| 国产精品成人观看视频免费| 欧美国产一区二区三区激情无套| 久久se精品一区二区| 亚洲一区精品在线| 亚洲天堂av在线免费| 亚洲每日更新|