takyeyu
關於 主进程创建n个子进程。有喪屍的問題.....
假設我 創建 2個 子進程......
子進程0 sleep(50) 才完成
子進程1 sleep(10) 就完成...
子進程1一完成...parent 也完成...
這樣就會子進程0 就會變成 喪屍了....
有沒有wait 是wait 所有的 子進程的啊......
原code 是這樣的
#include <stdio.h>
#include <stdlib.h>
#define N (2) /* # of child processes */
int main( void )
{
int pid;
int i;
for( i = 0; i < N; ++i ){
pid = fork();
if( pid < 0 ){
printf( "ERROR/n" );
exit( -1 );
}else if( 0 == pid ){
/* Maybe you need a switch(i) or an array of function pointer */
exit(0);
}else{
/* I'm a big Dad! I wanna more children. */
/* I'm not in China. */
continue;
}
} /* end for */
/* enough children */
wait(NULL);
parent process;
return 0;
}
new_learner
父进程可否调wait函数两次?
cugb_cat
捕捉SIGCHLD信号,在信号中调用wait。
takyeyu
[quote]原帖由 [i]new_learner[/i] 于 2008-2-17 23:52 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7971087&ptid=1053700][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
父进程可否调wait函数两次? [/quote]
難道要 這樣用嗎.....
for(i=0; i<N; i++) wait(NULL);
cugb_cat
[quote]原帖由 [i]takyeyu[/i] 于 2008-2-18 10:27 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7971633&ptid=1053700][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
難道要 這樣用嗎.....
for(i=0; i [/quote]
是
converse
看情况,如果你的父进程就是等待子进程退出什么都不做,那么就一个循环调用wait函数直到没有子进程退出为止;如果有别的事情去做,那就响应SIGCHLD信号,在收到这个信号的时候调用wait函数处理,完事了之后继续做自己的事情.
new_learner
关键是看你父进程对子进程结束这个事件采取同步还是异步处理
同步的话,就for(xxx) wait()
异步的话,就捕捉SIGCHLD信号,再wait()
takyeyu
同步的...
我用 了 while(wait(NULL)!=-1);
貌似解決了~~