为进程创建n个子进程

时间:2014-07-20 09:14:52

标签: c linux loops process fork

正如标题所说,我正在尝试为一个过程创建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,多启动。

1 个答案:

答案 0 :(得分:0)

尝试替换注释// else exit(0);行'else wait(NULL);'它会导致父母等待孩子。孤立进程由'init进程'采用。