终端中断分叉printf()

时间:2013-12-05 14:52:49

标签: c linux fork

我想在C做一个小程序。 它完全是关于分叉进程和执行linux程序。 流程层次应该如下所示

    P1
 P2    P3
         P4

所以P2和P3是P1的孩子,P4是P3的孩子! 但我总是遇到父进程在其他进程准备好之前就已经死亡的问题。所以终端输出被终端本身打断了O:我必须点击回车退出它! (但不是每次o.O)

我的代码如下所示:

#include <unistd.h>
#include <stdio.h>

int main(void)
{

    pid_t kind1, kind2, kind3,hilf; 
    kind1 = fork();
    if(kind1==0)
    {

        printf("Prozess 2:%d--%d\n",getpid(),getppid());
    }
    else
    {
        kind2 = fork();
        if(kind2==0)
        {
            hilf=getpid();          
            fork();
            if(getpid()==hilf)
            {                       
                printf("Prozess 3:%d--%d\n",getpid(),getppid());
                wait();
            }
            else
            {
                printf("Prozess 4:%d--%d\n",getpid(),getppid());
            }
        }
        else
        {
            printf("Prozess 1:%d\n",getpid());
            wait();
            return 0;
        }
    }


    return 0;
}

printf将被各种exec *函数取代! 请告诉我如何正确使用等待,这样我的问题就不会发生了!

2 个答案:

答案 0 :(得分:2)

编写这样的代码的惯用方法是

  1. 使用fork()的返回值。如果它大于零,则这是子进程的pid,并且您正在父进程中执行。
  2. 使用父进程中waitpid()系列的成员等待子进程结束。

答案 1 :(得分:-1)

使用pipe同步退出。

int main() {

int syncpipe[2];
pipe(syncpipe);

......

close(syncpipe[1]); // I am done
char buffer;
read(syncpipe[0], &buffer, 1); // wait for all others

return 0;
}
相关问题