2017-05-08 2 views
0

내가 안녕하세요 세계 코드의 조각을 실행하려고 반환GETPID()는 예상치 못한 값

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

char string1[] = "\n Hello"; 
char string2[] = " World.\n"; 

int main(void) 
{ 

int childpid; 

if((childpid = fork()) == -1){ 
    printf("\n Can't fork.\n"); 
    exit(0); 
} 

else if(childpid == 0){ /* Child process */ 
    printf("\n Child: My pid = %d, Parent pid = %d \n", getpid(), getppid()); 
    exit(0);  
} 

else{ /* Parent Process */ 
    printf("\n Parent: Child pid = %d, My pid = %d, Parent pid = %d \n", childpid, getpid(),getppid()); 
    exit(0); 
} 

} 

내가 무엇입니까 출력은 아이의 부모 PID에 관한마다 다릅니다

~$ ./f 

Parent: Child pid = 6394, My pid = 6393, Parent pid = 27383 

Child: My pid = 6394, Parent pid = 1842 

~$ ./f 

Parent: Child pid = 6398, My pid = 6397, Parent pid = 27383 

Child: My pid = 6398, Parent pid = 6397 

pid = 1842에 속한 프로세스를 확인했을 때 그 프로세스는 /sbin/upstart --user의 PID입니다. 누구든지 이러한 결과에 대한 해석을하시기 바랍니다.

+0

는 waitpid. 붙여 넣은 코드는 내 컴퓨터에서 예상되는 동작을 보여줍니다. –

답변

4

경쟁 조건이 있습니다. 때로는 부모님이 조금 더 빨리 끝내는 경우가 있는데,이 이상한 결과 (다른 부모 ID)가있는 경우입니다.

부모님의 잠시 잠을 자면 어떤 일이 일어나는지보십시오.

사실, 당신은 당신의 아이를 기다릴 수 : 나는 당신의 문제를 재현 할 수없는 오전

... 
int status; 
waitpid(childpid, &status, 0); 
printf("\n Parent: Child pid = %d, My pid = %d, Parent pid = %d \n", childpid, getpid(),getppid()); 
exit(0); 
...