我开始学习一些C,并在研究fork时等待函数,我得到了意想不到的输出结果。至少对于我来说。如何使用Fork()仅创建2个子进程?
有没有什么办法从父母只创建2个子进程?
这里我的代码:
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
/* Create the pipe */
int fd [2];
pipe(fd);
pid_t pid;
pid_t pidb;
pid = fork();
pidb = fork();
if (pid < 0)
{
printf ("Fork Failed\n");
return -1;
}
else if (pid == 0)
{
//printf("I'm the child\n");
}
else
{
//printf("I'm the parent\n");
}
printf("I'm pid %d\n",getpid());
return 0;
}
,这里是我的输出:
I'm pid 6763
I'm pid 6765
I'm pid 6764
I'm pid 6766
请忽略管道的一部分,我还没有得到那么远呢。我只是试图创建只有2个子进程,所以我期望3“我是pid ...”输出只有1为父母,我会等待和2个子进程,将通过管道进行通信。
让我知道你是否看到我的错误在哪里。
'叉(2)'是既简单和UNIX API中最容易被误解的呼叫中的一个。只要看看“相关”边栏。你有没有特别的理由让你想要两个孩子之间的沟通,而不是父母与孩子之间的沟通? – dmckee
对于fork()调用你为什么要检查pid == 0?我怎么知道哪一个是父母,哪个是孩子? – TwilightSparkleTheGeek
@TwilightSparkleTheGeek'man fork'状态: 返回值 成功时,子进程的PID将返回到父进程中,并且子进程返回 0。失败时,-1在父代中返回, 未创建子进程,并且适当地设置errno。 – mimoralea