gpt4 book ai didi

c - 终端中断 fork printf()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:47 27 4
gpt4 key购买 nike

我想用 C 编写一个小程序。这一切都是关于 fork 进程和执行 linux 程序。进程层次应该是这样的

    P1
P2 P3
P4

所以 P2 和 P3 是 P1 的 child ,P4 是 P3 的 child !但我总是遇到父进程在其他进程准备好之前就死掉的问题。所以terminal中的输出被terminal本身打断了 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* 函数取代!请告诉我如何正确使用等待,这样我的问题就不会发生!

最佳答案

像这样编写代码的惯用方式是

  1. 使用fork() 的返回值。如果它大于零,这是子进程的pid,你在父进程中执行。
  2. 在父进程中使用waitpid()家族的成员等待子进程结束。

关于c - 终端中断 fork printf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com