У меня есть надоедливый зомби-процесс, который принимает init и никуда не денется. Я читал, что есть способ создать фиктивный процесс, прикрепить зомби как дочерний элемент этого нового процесса и затем убить его, удалив из таблицы процессов.
Как бы я именно это сделал?
И да, я прочитал большую часть этого материала:
Зомби-процесс уже мертв, поэтому его нельзя убить.
Или
Вам нужно просто перезагрузить вашу систему
И
Зомби-процессы не используют никаких ресурсов, вы должны просто позволить им быть
К сожалению, многие программы проверяют таблицу процессов, чтобы узнать, запущен ли уже экземпляр, и отказываются запускать новый, если в таблице процессов есть запись.
И перезагружать каждый раз, когда мое SSHFS-соединение разрывается, забирая с собой Sublime, довольно глупо.
В только способ избавиться от зомби - заставить его родителя wait()
чтобы он мог сообщить о своем статусе выхода. Вы можете сделать это, отправив SIGCHLD
к родителю, если родитель написан правильно.
Если у вас есть зомби, это обычно означает, что родитель НЕ написано правильно (потому что ребенок уже отправил SIGCHLD
своему родителю, когда он умер и стал зомби), поэтому следующим шагом будет его убийство.
Инструмент вроде pstree
(с -p
option) может показать вам происхождение ваших зомби, чтобы вы знали, какой процесс является родительским.
Когда родитель умрет, зомби будет усыновлен init
, что всегда wait()
Он убьет детей и с радостью убьет всех усыновленных зомби.
Если родительский процесс на самом деле init
(PID 1) вы уже находитесь в ситуации, которой никогда не должно быть. Вы можете попробовать отправить SIGCHLD
к init
, но вам действительно не следует этого делать, и если это не сработает, ваш единственный выход - перезагрузить, потому что ваша система init
сломан и не выполняет свою работу.
(Это варианты «дробовика».)
Некоторые более творческих людей, чем я также придумали этот вариант, если вы хотите избежать убийства родительского процесса:
gdb
и attach
родителю:attach 3100
waitpid
для зомби:call waitpid(3101,0,0)
detach
) и выйдите из отладчика.(Это снайперская винтовка с тонкой настройкой.)
Почему вас беспокоят зомби-процессы? Ресурсы, которые они удерживают, минимальны (место для задачи структуры скелета, PID и многого другого). Конечно, это неприлично, но это все. Найдите их родителей и исправьте их, замените их более написанными альтернативами (могут иметь другие полезные побочные эффекты), сообщите об этом как об ошибках (что, безусловно, есть).