我想在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 *函数取代! 请告诉我如何正确使用等待,这样我的问题就不会发生了!
答案 0 :(得分:2)
编写这样的代码的惯用方法是
fork()
的返回值。如果它大于零,则这是子进程的pid,并且您正在父进程中执行。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;
}