2011-04-27 7 views
1

내가 자식 프로세스를 실행하는 포크와 execv와를 사용의 리턴 코드를 읽을 수 있습니다. 모 프로그램에서, 나는이 있습니다어떻게 자식 프로세스

int status; 
wait(&status); 
cout << "return code = " << status << endl; 

이 종료하는 자식 프로세스를 기다리라는 뜻을 한 후는 반환 코드의 표시? 내가 http://linux.die.net/man/2/wait

+0

지금까지 모든 해답은 잘못이다. –

+0

종료 상태는 16 비트 값의 상위 8 비트로 인코딩되며 신호는 하위 8 비트로 인코딩됩니다. 프로세스가 신호로 인해 죽지 않으면 하위 비트는 0입니다. 신호가 없어지면 상위 비트는 0입니다. 공식 POSIX 정의에 대한 (http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html) [''는 waitpid()를') (대기'및] 참조; 8 비트 세트는 언급하지 않지만 상태 및 신호 정보를 얻기위한 매크로를 제공합니다. –

답변

0

예, 그것은해야한다. wait()은 첫 번째 완료된 하위 프로세스의 상태를 반환합니다. WEXITSTATUS조차 언급되지 않았기 때문에

+1

'wait (& status)'는 자식 프로세스를 기다리는'waitpid (-1, & status, 0)'과 동일하다. [이]는 (http://linux.die.net/man/2/wait는) 다른 주장 – mdec

1

을 읽을 무엇 지정된 자식 프로세스의 상태를 확인하려는 경우가 waitpid()를 사용해야에서

+0

예상 그래서 한 하나의 자식 프로세스가 같은 코드가 작동합니다. 한 아이가 있다면 – mdec

+1

니스 편집) (대기', downvote :) – mdec

+0

감사를 철회한다'waitpid를'뿐만 아니라 작동()'. 사실, 자식이 여러 명이라도, '시체'가 무엇인지 신경 쓰지 않는 한'wait()'는 잘 작동합니다. 당신이 사용하는 경우 '는 waitpid()'프로세스는 좀비의 컬렉션을 구축 할 수, 종료하지 않는 특정 프로세스를 기다리 - 죽은하지만있는 부모 프로세스가 아직 기다렸다하지 않은 프로세스를. 또한 SIGCHLD를 수정해야 할 수도 있습니다. –

관련 문제