【发布时间】:2014-09-11 00:13:35
【问题描述】:
正如标题所说,我正在尝试为一个进程创建 n 个子进程。我有以下代码和输出。我想在某个地方我允许一个孩子而不是父亲进入循环,但我不知道发生在哪里。或者,我可以考虑另一种情况:父亲是否在所有孩子被创建之前就退出了,而孤儿被另一个进程“收养”?但是,如果是这样,那不应该是初始化过程吗?我是 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。
【问题讨论】:
-
您查看 1120 是什么了吗? ->
ps -p 1120 -
观察力不错。用您建议的检查更新了我的问题。所以,两者兼而有之。它的 pid 不同于 1 的 init,并且父亲确实在其孩子之前退出。
标签: c linux loops process fork