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

posts - 297,  comments - 15,  trackbacks - 0

轉(zhuǎn)載請注明:http://www.coder4.com/index.php /archives/151

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

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

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     //子進(jìn)程的pid
19     int c_pid;
20     int pid;
21  
22     if ((pid = fork())) {
23         //父進(jìn)程
24         c_pid = pid;
25         printf("The child process is %d\n", c_pid);
26         sleep(5);
27         exit(0);
28     } else {
29         //子進(jìn)程
30         printf("I 'm a child.\n");
31         exit(0);
32     }
33 }

如上面的代碼,在父進(jìn)程的5s內(nèi),子進(jìn)程一直是僵尸!
因此,需要對僵尸進(jìn)程進(jìn)行回收,傳統(tǒng)的回收方法是,使用wait()函數(shù),等待子進(jìn)程,wait()是阻塞模式的,當(dāng)子進(jìn)程沒有結(jié)束之前,wait一直等 待,不往下面的語句執(zhí)行。

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     //子進(jìn)程的pid
20     int c_pid;
21     int pid;
22  
23     if ((pid = fork())) {
24         //父進(jìn)程
25         c_pid = pid;
26         printf("The child process is %d\n", c_pid);
27         //阻塞等待子進(jìn)程
28         int status;
29         if ((pid = wait(&status)) != -1 && pid == c_pid) {
30             //成功回收子進(jìn)程
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         //子進(jìn)程
41         printf("I 'm a child.\n");
42         sleep(5);
43         exit(0);
44     }
45 }

轉(zhuǎn)載自:4號程序員

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

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,全部代碼如下,注意父進(jìn)程不要再用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     //子進(jìn)程的pid
29     int c_pid;
30     int pid;
31  
32     signal(SIGCHLD, handler);
33  
34     if ((pid = fork())) {
35         //父進(jìn)程
36         c_pid = pid;
37         printf("The child process is %d\n", c_pid);
38  
39         //父進(jìn)程不用等待,做自己的事 情吧~
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         //子進(jìn)程
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
<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

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

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>
            一区二区三区欧美亚洲| 久久精品欧美| 国产精品日韩在线| 久久久久久有精品国产| 美女脱光内衣内裤视频久久影院 | 麻豆九一精品爱看视频在线观看免费| 久久精品最新地址| 在线视频亚洲一区| 久久久九九九九| 亚洲午夜国产成人av电影男同| 亚洲午夜激情网站| 亚洲精品免费观看| 久久久综合网站| 欧美一区二粉嫩精品国产一线天| 六月天综合网| 欧美不卡三区| 在线高清一区| 欧美在线你懂的| 久久精品亚洲热| 国产欧美另类| 黑人巨大精品欧美一区二区 | 国内激情久久| 性18欧美另类| 久久精品日韩欧美| 国产视频久久久久久久| 午夜亚洲激情| 久久最新视频| 亚洲国产精品ⅴa在线观看| 久久一区二区三区四区五区| 麻豆精品精华液| 亚洲美女av黄| 国产美女精品一区二区三区| 亚洲综合国产| 久久久亚洲精品一区二区三区| 日韩一区二区精品在线观看| 中文成人激情娱乐网| 国产精品久久久久久久久久尿 | 小处雏高清一区二区三区| 欧美一区视频| 亚洲精品免费在线播放| 欧美乱妇高清无乱码| 午夜电影亚洲| 亚洲激情婷婷| 亚洲欧美久久久| 亚洲高清视频一区二区| 欧美午夜精品久久久| 久久久999国产| 亚洲一区国产精品| 亚洲国产精品久久久久| 在线电影一区| 欧美日韩中国免费专区在线看| 亚洲一区自拍| 亚洲国产精品ⅴa在线观看 | 欧美大胆成人| 久久精品亚洲一区二区三区浴池| 日韩视频第一页| 欧美国产欧美亚洲国产日韩mv天天看完整| 一本色道久久综合| 一本一本a久久| 日韩网站在线| 亚洲影音先锋| 香蕉久久夜色精品国产| 亚洲尤物在线视频观看| 亚洲精品久久久久久一区二区| 亚洲黄色毛片| 最新国产成人av网站网址麻豆| 亚洲经典三级| 一本大道久久a久久精品综合| 日韩亚洲精品电影| 在线视频欧美日韩精品| 亚洲主播在线| 久久久久久久综合色一本| 欧美一区激情| 久久综合九色九九| 欧美激情精品久久久久久| 欧美电影打屁股sp| 久久人人爽人人爽爽久久| 久久影院午夜论| 欧美激情aaaa| 亚洲一区二区久久| 久久久久91| 国产精品网曝门| 在线成人av.com| 亚洲视频一区二区在线观看 | 亚洲国产精品ⅴa在线观看| 亚洲精品乱码视频| 久久久国产91| 欧美日韩成人激情| 尤物在线精品| 欧美一区二区精品久久911| 久久婷婷蜜乳一本欲蜜臀| 91久久中文字幕| 久久综合久久综合久久综合| 欧美激情视频一区二区三区免费 | 国产一区在线免费观看| 亚洲国产合集| 亚洲私人影吧| 久久综合给合| 亚洲免费在线观看| 久久永久免费| 国产亚洲精品v| 91久久中文| 久久精品99国产精品酒店日本| 国产美女高潮久久白浆| 日韩小视频在线观看专区| 亚洲国产高潮在线观看| 另类图片综合电影| 亚洲国产一区二区视频| 久久精彩视频| 亚洲一区二区三区午夜| 欧美精品久久久久a| 99成人在线| 亚洲性xxxx| 国产性天天综合网| 久久中文久久字幕| 欧美a级一区二区| 一本久道久久综合狠狠爱| 在线一区欧美| 国产美女精品免费电影| 久久午夜激情| 欧美激情影院| 久久黄色影院| 欧美精品一区二区蜜臀亚洲| 性欧美超级视频| 免费欧美高清视频| 亚洲欧美日韩精品一区二区| 久久久久www| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲黄页视频免费观看| 欧美天天影院| 欧美成人在线影院| 国产精品九九久久久久久久| 久久国产精品72免费观看| 欧美电影免费观看大全| 亚久久调教视频| 欧美涩涩视频| 亚洲高清视频一区| 伊人狠狠色j香婷婷综合| 亚洲午夜精品一区二区三区他趣| 亚洲激情一区| 欧美福利一区二区| 欧美激情一级片一区二区| 1000部国产精品成人观看| 午夜欧美理论片| 久久精品国产亚洲高清剧情介绍| 欧美三区在线视频| 99成人免费视频| 欧美亚洲尤物久久| 国产偷国产偷亚洲高清97cao| 香蕉久久国产| 激情欧美日韩一区| 老司机67194精品线观看| 蜜臀va亚洲va欧美va天堂| 尤物在线观看一区| 免费在线看一区| 日韩视频免费看| 欧美在线视频一区| 影音先锋国产精品| 欧美日韩综合网| 亚洲欧美制服中文字幕| 久久久久这里只有精品| 亚洲欧洲日产国码二区| 国产精品免费在线| 久久精品一区四区| 中文亚洲字幕| 久久婷婷色综合| 亚洲在线视频网站| 亚洲精品一区二区三区樱花| 国产精品一香蕉国产线看观看| 久久中文欧美| 亚洲一区在线播放| 一区二区久久久久| 亚洲美洲欧洲综合国产一区| 男人的天堂亚洲| 久久久国产成人精品| 亚洲网址在线| 一区二区三区www| 亚洲国产专区| 最近中文字幕mv在线一区二区三区四区 | 久久精品视频导航| 亚洲欧美日本视频在线观看| 日韩亚洲一区在线播放| 亚洲成人直播| 亚洲欧洲精品一区二区三区| 影音先锋欧美精品| 在线观看成人网| 亚洲国产高清在线观看视频| 亚洲激情国产| 亚洲美女在线视频| 亚洲午夜黄色| 欧美一区二区精品在线| 久久精品视频网| 欧美高清在线播放| 亚洲黄色一区二区三区| 亚洲午夜精品在线| 欧美成年人视频| 国产精品毛片va一区二区三区| 国产美女高潮久久白浆| 亚洲日本成人| 午夜精品视频|