2011-10-14 5 views
2

이해 나는 process forking을 배우고 난 3 목록의 코드를하려고 해요 : 샘플 페이지는 표시 반면유닉스 포크

Original program, pid=2728 
In parent, pid=2728, fork returned=2731 
In child process, pid=2731, ppid=2728 

:

sunbox$ cat fork2.c 
#include <unistd.h> 
#include <stdio.h> 

int main (void) { 

     pid_t p; 

     printf("Original program, pid=%d\n", getpid()); 
     p = fork(); 
     if (p == 0) { 
       printf("In child process, pid=%d, ppid=%d\n", 
         getpid(), getppid()); 
     } else { 
       printf("In parent, pid=%d, fork returned=%d\n", 
         getpid(), p); 
     } 
} 

sunbox$ gcc fork2.c -o fork2 
sunbox$ ./fork2 
Original program, pid=767 
In child process, pid=768, ppid=767 
In parent, pid=767, fork returned=768 

내가 얻을 출력을 먼저 아이의 출산 후 부모? 나는 이것을 이해하지 못한다.

또한 대학 실험실에서 코드를 실행하면 페이지에 표시된대로 출력됩니다. 이 순진한 질문에 답하기 위해 고생 한 것에 대해 미리 감사드립니다.

중요한 점은 우분투 11.04입니다.

+0

[unix.se] (http://unix.stackexchange.com/) – ierax

+0

POSIX와 관련된 질문을하기에 더 좋은 곳은 귀하가상의 한 코드를 넣었습니다. – JeremyP

+0

@faif : POSIX 소프트웨어 개발과 관련되어 있으므로 여기에 속한다고 생각합니다. – Rob

답변

6

fork() 시스템 호출 후에는 먼저 프로세스가 계속되는 것은 OS 스케줄러에 달려 있습니다. 이 동일한 프로그램을 반복적으로 실행하면 다른 주문이 발생할 수 있습니다.

이것을 non-determinism이라고합니다.