부모로부터 직접 두 프로세스를 생성하는 프로그램을 작성 중입니다. 내 실제 출력은 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;
}
입니다. 무엇이 잘못 되었습니까? 또는이 문제를 어떻게 해결할 수 있습니까?
코드는'fork()'를 한 번 호출하기 때문에 하나의 자식 만 생성됩니다. – user3629249
참고 : 함수 :'fork()'에는 3 가지 종류의 반환 값이 있습니다. 게시 된 코드는 '== 0'리턴 만 확인하고 오류가 발생하지 않았다고 가정합니다. 이는 오류를 확인하지 못하는 매우 나쁜 프로그래밍 습관입니다. – user3629249
주 프로세스 (상위 프로세스)는 모든 하위 프로세스가 종료 될 때까지 리턴해서는 안됩니다. 따라서 부모는 부모가 종료되기 전에 각 자식에 대해'wait()'또는 더 나은'waitpid()'를 호출해야합니다. – user3629249