четене на изходната стойност на нефункциониращ процес

Имам мъртъв процес, който сега е в нефункциониращо състояние, което означава, че неговият родителски процес не е прочел изходната си стойност. (и няма да го прочете)

Знам, че изходната стойност се съхранява някъде в ядрото за четене от родителския процес, но има ли начин да прочета тази стойност, ако не съм родителският процес?

В идеалния случай бих могъл да направя това от shell или abritarry C/python/your-favorite-language програма.

[редактиране]: Това не е въпрос как да пожънеш детето или да го убиеш. Не ме интересува дали използва слот в таблицата на процесите. Просто искам да знам каква е изходната му стойност. т.е. бих искал да прочета task_struct->exit_code в ядрото.

Матийо


person mathieu    schedule 05.07.2012    source източник
comment
Мисля, че init поема ролята на родител на всички зомбита... Все пак не съм сигурен.   -  person Linuxios    schedule 05.07.2012
comment
Не, поема се само след като родителят умре. Това не е моят случай: родителят все още работи, но знам, че няма да прочете изходната стойност   -  person mathieu    schedule 05.07.2012
comment
Е, в Solaris е тривиален въпрос да се използва preap, но не знам за Linux   -  person Petesh    schedule 05.07.2012


Отговори (2)


Не. Опитът за извикване на waitpid() за процес, който не е един от децата на извикващия процес, ще доведе до ECHILD. Ще трябва да убиете родителския процес, като накарате детето да се възстанови на init, което впоследствие ще го извлече.

person Ignacio Vazquez-Abrams    schedule 05.07.2012
comment
Имайте предвид, че не търся как да създам детето. Не ми пука. Просто искам да погледна проклетата изходна стойност. - person mathieu; 05.07.2012
comment
Това ще изисква поддръжка на ядрото; никой потребителски процес няма директен достъп до него, освен случайно, напр. strace. - person Ignacio Vazquez-Abrams; 05.07.2012

Едно нещо, което може да направите, е да изпратите на родителя SIGCHLD, което му казва, че дете е починало. Ако програмата е с някакво качество, тя ще пожъне резултата.

kill -s SIGCHLD parentpid
person Linuxios    schedule 05.07.2012