Я когда-то бежал в эту проблему, когда моя система работала бесперебойные процессы. Мы пошли в очень неприятную ситуацию, где наши процессы Apache были, казалось, ждут чего-то с диска, и не может быть убит .
Насколько я знаю, при отключении, Linux посылает SIGTERM
SIGTERM SIGTERM SIGKILL SIGKILL
через несколько секунд для тех, кто осмелился не подчиняться. Однако сам ядро защитит эти процессы, если они находятся в бесперебойном состоянии: это помогает предотвратить потери данных, когда вызов висящей системы включает в себя операцию ввода-вывода. Прямо сейчас я не могу думать о том, что что-то другое, способное к отбросить * A SIGKILL
, поэтому другие элементы ответа могут быть приведены здесь.
* Это довольно упрощенный (если не ошибочный) способ увидеть его, и он не принимает сигнал асинхроничности во внимание. Смотрите комментарий Gilles для более подробной информации о этой точке.
Тем не менее, когда дело доходит до бесперебойных процессов ...
Как убить бесперебойного процесса без перезагрузки: как-то сделать системный вызов завершителем. Часто наиболее эффективным способом сделать это без удаления выключателя питания - это тянуть шнур питания. Вы также можете стать хакером ядра и сделать драйвер использовать Task_killable, как объяснено в статье LWN .
Вы можете получить список всех запущенных бесперебойных процессов с ...
$ ps -eo 'state,pid,args' | awk '$1 == "D" {print;}'
$ ps -eo 'state,pid,args' | grep -E '^D'
$ ps -eo 'state,pid,args' | egrep '^D'
...