Есть ли разница между
kill -9 212121
а также
kill 212121
command-line
bash
user784637
источник
источник
kill -9
Ответы:
Страница
kill
руководства Ubuntu для объясняет назначение-9
переключателя (правда, довольно изменчиво):Вот что говорит другая страница руководства.
Следовательно, использование
-9
переключателя гарантирует, что процесс будет эффективно убит. Даже если замороженный или не отвечающий процесс может не отвечать на простойTERM
сигнал, он умрет при отправкеKILL
сигнала.источник
Команда kill отправит определенный сигнал процессу с заданным идентификатором (PID):
Конечно, мы можем уничтожать только те процессы, которые у нас есть, тогда как root может уничтожать все процессы. Посмотрите Википедию для хорошего обзора вычислительных сигналов.
Сигналы, которые
kill
можно отправить, перечислены на странице руководства . Сигнал может быть представлен по имени или по номеру. Если сигнал не подается, сигнал по умолчанию 15 соотв.TERM
используется.Поэтому все три команды ниже идентичны:
Разница между
SIGTERM
иSIGKILL
в том, как приложение может воздействовать на сигнал:TERM
: приложение сможет завершиться, то есть правильно запустить процедуру завершения работы.KILL
: приложения останавливаются и немедленно уничтожаются (что может привести к потере данных или повышению аппорта, чтобы в некоторых случаях сообщать о предполагаемом сбое).источник
Обратите внимание, что все следующее является синонимом:
Стоит отметить, что в мире обработки сигналов SIGKILL является одним из немногих уникальных, которые обрабатываются операционной системой, а не программой. Когда вы запускаете
kill -9
, вы не говорите приложению прекратить работу, вместо этого вы говорите ОС прекратить запуск программы, независимо от того, что она делает.После отправки сообщения SIGKILL программа будет немедленно остановлена. Если какие-либо вызовы ядра выполняются (например, File IO) от имени программы, эти вызовы могут продолжаться или не продолжаться, пока не завершатся, в зависимости от вызова, но сама программа больше не будет запускаться. Обратите внимание, что отслеживаемые задачи или задачи, выполняемые в отладчике, могут вести себя иначе.
Другим сигналом, который нельзя заблокировать, является SIGSTOP, который имеет аналогичный эффект, но вместо этого останавливает программу; Вы можете отправить SIGCONT позже, чтобы возобновить его. Это поведение полностью контролируется ОС, и программа не получает никаких предварительных уведомлений.
Все остальные сигналы отправляются в программу; он может обрабатывать их по своему усмотрению или, если игнорирует сигнал, то следует поведение по умолчанию.
Вот несколько полезных сигналов, которые вы можете отправлять процессу:
Сообщает программе, что пользователь отключился (например, был закрыт сеанс SSH или окно терминала).
Обычно делает изящное завершение программы.
Отправляется, когда вы нажимаете CTRL+ C
Обычно означает «остановить то, что вы делаете» - может или не может убить программу
По умолчанию отправлено
kill
иkillall
.Обычно завершает программу ... иногда после того, как программа завершает все, что она делает.
Отправляется, когда вы нажимаете CTRL+ Z
Пауза программы, обсуждалось выше
Сообщает программе, что конвейер закрыт. Обычно завершает программу.
Например
cat /etc/passwd | head -n1
, отправит SIGPIPEcat
процессу после печати первой строки, что приведетcat
к завершению до завершения всего файла.В то время как все эти сигналы происходят "естественно" в своих собственных настройках, вы можете использовать этот сигнал для имитации условия для достижения желаемого результата.
Например, если вы хотите прекратить чей-то сеанс SSH, вы можете просто завершить процесс, но тем самым вы не сможете обновить его файл HISTORY, что может быть важно по соображениям безопасности. Но вместо этого, если вы отправите SIGHUP , процесс будет считать, что соединение разорвано, и выполнит стандартную очистку.
источник
SIGQUIT
, где действие по умолчанию - сбросить ядро и завершиться. Это может быть использовано, если программа делает что-то очень неправильное, вам нужно немедленно остановить это, и вы хотели бы иметь возможность отладить это позже.kill -9 Значение: процесс будет убит ядром; этот сигнал нельзя игнорировать. 9 означает сигнал KILL, который не улавливается и не игнорируется
Использование: SIGKILL Singal
Значение Kill : Команда kill без какого-либо сигнала пропускает сигнал 15, который завершает процесс обычным способом.
Использует: сигнал SIGTERM , который может обрабатываться программистами
источник