чтение выходного значения несуществующего процесса

У меня есть мертвый процесс, который сейчас находится в несуществующем состоянии, что означает, что его родительский процесс не прочитал свое значение выхода. (и не собирается это читать)

Я знаю, что значение выхода хранится где-то в ядре для чтения родительским процессом, но есть ли способ прочитать это значение, если я не являюсь родительским процессом?

В идеале я мог бы сделать это из оболочки или произвольной программы 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
Ну в солярисе тривиально использовать preap, а вот в линуксе не знаю   -  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