Есть ли разница между
kill -9 212121
а также
kill 212121
Есть ли разница между
kill -9 212121
а также
kill 212121
Ответы:
Страница kill
руководства Ubuntu для объясняет назначение -9
переключателя (правда, довольно изменчиво):
Name Num Action Description
KILL 9 exit cannot be blocked
Вот что говорит другая страница руководства.
Команда
kill
отправляет указанный сигнал указанному процессу или группе процессов. Если сигнал не указан,TERM
сигнал отправляется.TERM
Сигнал будет убивать процессы , которые не поймать этот сигнал. Для других процессов может потребоваться использование сигналаKILL
(9
), поскольку этот сигнал не может быть перехвачен.
Следовательно, использование -9
переключателя гарантирует, что процесс будет эффективно убит. Даже если замороженный или не отвечающий процесс может не отвечать на простой TERM
сигнал, он умрет при отправке KILL
сигнала.
Команда kill отправит определенный сигнал процессу с заданным идентификатором (PID):
kill -<signal> <pid>
Конечно, мы можем уничтожать только те процессы, которые у нас есть, тогда как root может уничтожать все процессы. Посмотрите Википедию для хорошего обзора вычислительных сигналов.
Сигналы, которые kill
можно отправить, перечислены на странице руководства . Сигнал может быть представлен по имени или по номеру. Если сигнал не подается, сигнал по умолчанию 15 соотв. TERM
используется.
Поэтому все три команды ниже идентичны:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Разница между SIGTERM
и SIGKILL
в том, как приложение может воздействовать на сигнал:
TERM
: приложение сможет завершиться, то есть правильно запустить процедуру завершения работы. KILL
: приложения останавливаются и немедленно уничтожаются (что может привести к потере данных или повышению аппорта, чтобы в некоторых случаях сообщать о предполагаемом сбое).Обратите внимание, что все следующее является синонимом:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Стоит отметить, что в мире обработки сигналов SIGKILL является одним из немногих уникальных, которые обрабатываются операционной системой, а не программой. Когда вы запускаете kill -9
, вы не говорите приложению прекратить работу, вместо этого вы говорите ОС прекратить запуск программы, независимо от того, что она делает.
После отправки сообщения SIGKILL программа будет немедленно остановлена. Если какие-либо вызовы ядра выполняются (например, File IO) от имени программы, эти вызовы могут продолжаться или не продолжаться, пока не завершатся, в зависимости от вызова, но сама программа больше не будет запускаться. Обратите внимание, что отслеживаемые задачи или задачи, выполняемые в отладчике, могут вести себя иначе.
Другим сигналом, который нельзя заблокировать, является SIGSTOP, который имеет аналогичный эффект, но вместо этого останавливает программу; Вы можете отправить SIGCONT позже, чтобы возобновить его. Это поведение полностью контролируется ОС, и программа не получает никаких предварительных уведомлений.
Все остальные сигналы отправляются в программу; он может обрабатывать их по своему усмотрению или, если игнорирует сигнал, то следует поведение по умолчанию.
Вот несколько полезных сигналов, которые вы можете отправлять процессу:
kill
и killall
. cat /etc/passwd | head -n1
, отправит SIGPIPE cat
процессу после печати первой строки, что приведет cat
к завершению до завершения всего файла.В то время как все эти сигналы происходят "естественно" в своих собственных настройках, вы можете использовать этот сигнал для имитации условия для достижения желаемого результата.
Например, если вы хотите прекратить чей-то сеанс SSH, вы можете просто завершить процесс, но тем самым вы не сможете обновить его файл HISTORY, что может быть важно по соображениям безопасности. Но вместо этого, если вы отправите SIGHUP , процесс будет считать, что соединение разорвано, и выполнит стандартную очистку.
SIGQUIT
, где действие по умолчанию - сбросить ядро и завершиться. Это может быть использовано, если программа делает что-то очень неправильное, вам нужно немедленно остановить это, и вы хотели бы иметь возможность отладить это позже.
kill -9 Значение: процесс будет убит ядром; этот сигнал нельзя игнорировать. 9 означает сигнал KILL, который не улавливается и не игнорируется
Использование: SIGKILL Singal
Значение Kill : Команда kill без какого-либо сигнала пропускает сигнал 15, который завершает процесс обычным способом.
Использует: сигнал SIGTERM , который может обрабатываться программистами
kill -9