正如标题所说,我正在尝试为一个过程创建n个孩子。我有以下代码和输出。我觉得在某个地方我允许一个孩子进入循环,而不是父亲,但我不知道发生了什么。或者,我可以在另一种情况下思考:在所有孩子被创造出来之前,父亲是否已经离开,孤儿是否被采纳了?通过另一个过程?但是,如果是这样,那不应该是init进程吗?我是linux c的新手,请原谅我,如果第二种情况是错误的,但我有一个类似的程序,父母正在退出,而孩子似乎没有被init采用。它可能是别的东西,但我要求澄清这一点。我有这些疑虑,因为我看不到创建了1120流程的位置。非常感谢。
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main()
{
int pid[N],i=0;
if ((pid[0]=fork())<0)
{
perror("fork");
exit(EXIT_FAILURE);
}
else
if (pid[0]==0)
{
printf("I am 0, %d, son of %d\n",getpid(),getppid());
exit(0);
}
else //father
{
printf("Father: I am %d\n",getpid());
int i;
for (i=1; i<N; i++)
{
if ((pid[i]=fork())<0)
{
perror("fork");
exit(EXIT_FAILURE);
}
else
if (pid[i]==0)
{
printf("I am %d, my #no is %d, son of %d\n",i,getpid(),getppid());
exit(0);
}
//else exit(0);
}
exit(0);
}
return 0;
}
输出:
Father: I am 3213
I am 0, 3214, son of 3213
I am 3, my #no is 3217, son of 1120
danuts@danuts-PC:~/Desktop$ I am 2, my #no is 3216, son of 1120
I am 1, my #no is 3215, son of 1120
I am 4, my #no is 3218, son of 1120
检查过程1120:
danuts@danuts-PC:~/Desktop$ ps -p 1120
PID TTY TIME CMD
1120 ? 00:00:00 init
我原以为它是一个守护进程..但我不知道init可以是守护进程,虽然它与终端无关,并且有其他pid而不是1.为什么它有这个pid?我正在使用Ubuntu 14.04,多启动。
答案 0 :(得分:0)
尝试替换注释// else exit(0);行'else wait(NULL);'它会导致父母等待孩子。孤立进程由'init进程'采用。