У меня есть надоедливый процесс (в данном случае, зависший процесс, который должен был работать в iPhone Simulator (теперь давно закрыт).
97442 ?? 0:00.00 (MyProcess)
Я перепробовал все, что только мог придумать, включая
sudo kill -9 97442
sudo kill -HUP 97442
И все же, как и Ворон... процесс остается.
В данном случае это означает, что для продолжения работы мне придется перезагрузить компьютер.
решение1
Когда процесс остается в таблице процессов, как этот процесс, то вам нужно завершить его.родительпроцесс. Сначала найдите PID родительского процесса:
ps -eo 'pid,ppid,comm' | grep 97442
А затем бегите kill <pid>
, каков бы ни ppid
был результат. (Сначала дайте ему шанс умереть чисто.)
Традиционная архитектура Unix сохраняет информацию о процессеродителидля сбора и очистки, в случае если родительские процессы захотят запуститься, getrusage(2)
чтобы узнать использование ресурсов своими дочерними процессами или wait(2)
для определения их статуса завершения и т. д.
Если родители не уничтожают своих потомков, потомки остаются зомби — ДО ТЕХ ПОР, ПОКА родительский процесс не будет завершен, после чего ядро вернет потомкам родительский процесс init(8)
.init(8)
воляпожинать плоды вновь обретенных детей.