2012-07-05 2 views
0

현재 비활성 상태 인 죽은 프로세스가 있습니다. 즉, 상위 프로세스가 종료 값을 읽지 않았 음을 의미합니다. (그리고 그것을 읽지 않을 것입니다)존재하지 않는 프로세스의 종료 값을 읽음

부모 프로세스가 읽을 수있는 커널의 어딘가에 종료 값이 저장되어 있다는 것을 알고 있지만, 부모가 아닌 경우 그 값을 읽을 수있는 방법이 있습니다. 프로세스?

이상적으로는 쉘이나 비정상적인 C/python/your-favorite-language 프로그램에서이 작업을 수행 할 수 있습니다.

[편집] 이것은 아이를 낳거나 죽이는 방법에 관한 질문이 아닙니다. 프로세스 테이블의 슬롯을 사용하는지는 신경 쓰지 않습니다. 나는 그 출구 가치가 무엇인지 알고 싶다. 즉, 커널에서 task_struct-> exit_code를 읽으 려합니다. ECHILD가 발생합니다 호출 프로세스의 자식 중 하나가 아닌 프로세스에 대한 waitpid() 전화를 시도

마티유

+0

나는'init'이 모든 좀비의 부모 역할을 담당한다고 생각합니다. 확실하지 않습니다. – Linuxios

+0

아니요, 부모가 죽었을 때만 적용됩니다. 부모가 아직 실행 중이지만 종료 값을 읽지 못한다는 사실을 알았습니다. – mathieu

+0

솔라리스에서는'preap'을 사용하는 것이 사소한 일입니다. 리눅스에 대해서는 모르겠지만, – Petesh

답변

0

번호. 부모 프로세스를 죽여서 자식을 init의 부모로 변경해야합니다.

+0

저는 아닙니다. 진짜 아이를 어떻게 보는지. 신경 안써. 방금 출구 가치를보고 싶습니다. – mathieu

+1

그렇게하면 커널 지원이 필요합니다. 부수적으로 제외하고는 사용자 프로세스에 직접 액세스 할 수 없습니다. 'strace'. –

1

할 수있는 한 가지 방법은 자식이 사망했다는 것을 나타내는 부모 SIGCHLD을 보내는 것입니다. 프로그램의 품질이 좋으면 과정을 거치게됩니다.

kill -s SIGCHLD parentpid 
관련 문제