2011-10-01 8 views
0

여러 포크를 사용하는 프로그램을 만들려고합니다.
는 나 자신 그대로가 완벽하게 작동 Multiple fork() ConcurrencyC에서 다중 포크 예제

를 시작하는 데이 예제를 사용했다. 그러나 다음과 같이 자식에 print 문을 추가하려고 할 때 :

if ((p = fork()) == 0) { 
      // Child process: do your work here 
     printf("child %i\n", ii); 
      exit(0); 
     } 

프로세스가 완료되지 않습니다. 자녀에게 물건을 넣고 부모가 프로그램 실행을 끝내게하려면 어떻게해야합니까? 변경된 성공, 상태 자식의 프로세스 ID를 반환 귀하의 예제 코드에서

+0

무슨 일이 당신의 과정은 어떻게됩니까? 출력물을 보시겠습니까? –

+0

가지고있는 코드를 더 보여줘야합니다. 문제는 당신이 우리에게 보여준 것이 아닙니다. 'ii'가 무엇으로 설정되었는지는 명확하지 않습니다. 프로세스 ID를 출력하기 위해'getpid()'를 사용하는 것이 좋습니다. (예를 들어 필요에 따라 부모 프로세스에서'ii '가 증가하지 않는 방식을 상상할 수 있습니다.) –

+0

자식에서'exit '을 호출하지 마십시오. '_exit'를 사용하십시오. 그렇지 않으면, 하위 프로세스는 부모 프로세스에서 여전히 사용중인 리소스를 비우고 지울 수 있습니다. 예를 들어, 부모가 사용중인 파일 설명자의 현재 위치를 변경할 수 있습니다. 이로 인해 데이터가 손상 될 수 있습니다. –

답변

3

if (waitpid(childPids[ii], NULL, WNOHANG) == 0) { 

if (waitpid(childPids[ii], NULL, WNOHANG) == childPids[ii]) { 

때문에

는 waitpid()이어야한다 ; 오류시 -1이 반환됩니다. WNOHANG이 지정되고 pid로 지정된 자식 (들)이 아직 상태를 변경하지 않은 경우, 0이 리턴됩니다.

참조 : http://linux.die.net/man/2/waitpid

+0

감사합니다. 효과가 있으며 링크가 도움이됩니다. – richsoni