почему Ghost Process появляется после kill -9 - PullRequest
1 голос
/ 02 декабря 2009

В моем скрипте Python я сначала запускаю подпроцесс с помощью subprocess.Popen (). Позже я хочу убить этот подпроцесс с помощью kill -9 Pid.

Я обнаружил, что после выполнения уничтожения подпроцесс «останавливается», поскольку окно GUI этого процесса сразу исчезло. Но когда я выполняю «ps aux» сразу после уничтожения, в результате все равно отображается тот же процесс (с тем же pid). Разница в том, что команда процесса включена в пару (), как показано ниже:

root 30506 0,0 0,0 0 0 000 Z + 6:13 PM 0: 00.00 (пример процесса)

Это нарушает мой логический процесс обнаружения, так как ps может найти мертвый процесс.

Кто-нибудь знает, почему это происходит?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 02 декабря 2009

со страницы руководства ps:

Z несуществующий ("зомби") процесс, прекращено, но не получено его Родитель.

Это означает, что родитель не сделал waitpid() для ребенка, который умер.

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

0 голосов
/ 05 декабря 2009

Процессы зомби на самом деле просто запись в таблице процессов. Они не бегают, они не потребляют память; запись остается только потому, что родитель не проверил свой код выхода. Вы можете сделать двойной ответвление, как предлагает Гонсало, или отфильтровать все строки ps с Z в столбце S.

0 голосов
/ 02 декабря 2009

Я думаю, что сигнал -9 позволяет процессу пытаться обработать kill и тратить некоторое время на уборку. Вы можете попробовать просто убить процесс без сигнала.

Редактировать: о, это фактически -15 сигнал, который позволяет процессу умирать изящно. не бери в голову.

...