關於 主进程创建n个子进程。有喪屍的問題.....

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);

貌似解決了~~