1
我正在编写一个程序,直接从父进程创建两个进程。我期望的输出看起来像C子进程创建
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的过程。我做错了什么,或者我该如何解决这个问题?
该代码只有一个调用fork(),所以只有一个孩子被创建。 – user3629249
注意:函数fork()有三种返回值。发布的代码仅检查“== 0”返回,然后假定没有发生错误。这是一个非常糟糕的编程实践,无法检查错误。 – user3629249
主要过程(父母)在所有孩子退出之前都不应该返回。因此,在父节点退出前,父节点应该为每个子节点调用wait()或更好的waitpid()。 – user3629249