gpt4 book ai didi

为进程创建 n 个子进程

转载 作者:行者123 更新时间:2023-11-30 17:30:57 26 4
gpt4 key购买 nike

正如标题所示,我正在尝试为一个进程创建 n 个子进程。我有以下代码和输出。我想在某个地方我允许一个 child 而不是父亲进入循环,但我不知道这种情况发生在哪里。或者,我可以考虑另一种情况:父亲是否在创建所有 child 之前退出,并且孤儿被另一个进程“收养”?但是,如果是这样,那不应该是 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 可以是守护进程,尽管它与终端无关,并且具有除 1 以外的其他 pid。为什么它具有该 pid?我使用的是 Ubuntu 14.04,多重启动。

最佳答案

尝试替换注释//else exit(0);与行“else wait(NULL);”这会导致家长等待 child 。孤立进程由“init process”采用。

关于为进程创建 n 个子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24849021/

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