C子进程创建

时间:2017-02-22 17:39:22

标签: c process fork pid child-process

我正在编写一个直接从父级创建两个进程的程序。我的预期输出看起来像

Main programs process ID: 2834
Child 2 (ID: 2836) Start Sequence at: 23
Child 1 (ID: 2835) Start Sequence at: 20

我的实际输出是

Main programs process ID: 2834
Child 2 (ID: 2834) Start Sequence at: 23
Child 1 (ID: 2835) Start Sequence at: 20

我的代码是

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
   pid_t pid;
   int n;

    if (argc == 1) {
        fprintf(stderr,"Usage: ./a.out <starting value>\n");
        return -1;
    }
    n = atoi(argv[1]);

    int p_pid;
    p_pid = getpid();

    printf("Main programs process ID: %d\n", p_pid); 

    pid = fork();

    if(pid == 0){
       int c1;
       c1 = getpid();
       printf("Child 1 (ID: %d) Start Sequence at: %d\n", c1, n);
    }

    if(pid != 0){
       int c2;
       c2 = getpid();
       printf("Child 2 (ID: %d) Start Sequence at: %d\n", c2, n+3);
    }
    return 0;
}

我正在获得正确的子进程1,但没有正确的子进程2。我做错了什么或如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

fork()不会创建2个新流程。它从主过程中产生了一个孩子。如果您在父进程中,它将在子进程内返回0,并返回子进程的PID。

因此,在您的代码中,当您认为自己在孩子2中时 - 仍然是父母。您需要再次呼叫fork(),但只能在父进程内。