Какова цель опции -9 в команде kill?

39

Есть ли разница между

kill -9 212121

и

kill 212121
    
задан user784637 04.09.2012 в 18:05
источник

4 ответа

21

Страница пользователя Ubuntu для kill объясняет назначение переключателя -9 (правда, довольно изменчиво):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

Вот что говорит другая страница руководства .

  

Команда kill отправляет указанный сигнал указанному процессу или группе процессов. Если сигнал не указан, посылается сигнал TERM . Сигнал TERM уничтожит процессы, которые не поймают этот сигнал. Для других процессов может потребоваться использовать сигнал KILL ( 9 ), так как этот сигнал не может быть пойман.

Следовательно, использование переключателя -9 гарантирует, что процесс будет эффективно убит. Несмотря на то, что замороженный или не реагирующий процесс может не реагировать на простой сигнал TERM , он будет умирать при отправке сигнала KILL .

    
ответ дан SirCharlo 04.09.2012 в 18:12
источник
36

Команда убить отправит определенный < a href="http://en.wikipedia.org/wiki/Signal_%28computing%29"> сигнал для процесса с заданным идентификатором (PID):

kill -<signal> <pid>

Конечно, мы можем только убивать процессы, которыми мы владеем, тогда как root может убить все процессы. См. Википедию за хорошее резюме вычислительных сигналов.

Сигналы kill могут отправлять, перечислены в manpage . Сигнал может быть представлен по имени или по номеру. Если сигнал не подан, сигнал по умолчанию 15 соответственно. TERM .

Таким образом, все три приведенные ниже команды идентичны:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Разница между SIGTERM и SIGKILL заключается в том, как приложение может воздействовать на сигнал:

  • TERM : приложение сможет завершить работу, то есть правильно запустить процедуру отключения.
  • KILL : приложения останавливаются и немедленно уничтожаются (что может привести к потере данных или повышению apport, чтобы сообщить о предполагаемом сбое в некоторых случаях).
ответ дан Takkat 04.09.2012 в 18:32
11

Обратите внимание, что все следующие синонимы:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Стоит отметить, что в мире обработки сигналов SIGKILL является одним из немногих уникальных, которые обрабатываются операционной системой , а не программой. Когда вы запускаете kill -9 , вы не сообщаете приложению о завершении, вместо этого вы говорите ОС, чтобы остановить запуск программы, независимо от того, что делает программа.

После отправки SIGKILL программа будет немедленно остановлена. Если какие-либо вызовы ядра выполняются (например, File IO) от имени программы, эти вызовы могут или не продолжаться до тех пор, пока они не закончатся, в зависимости от вызова, но сама программа больше не будет работать. Обратите внимание, что задачи traced или задачи, запущенные под отладчиком, могут вести себя по-другому здесь.

Другим сигналом, который не может быть заблокирован, является SIGSTOP , который имеет аналогичный эффект, но вместо этого замораживает программу; вы можете отправить SIGCONT позже, чтобы возобновить его. Это поведение полностью контролируется ОС, и программа не получает никаких предварительных уведомлений.

Все остальные сигналы отправляются в программу; он может обрабатывать их, однако он выбирает, или если он игнорирует сигнал, тогда выполняется поведение по умолчанию.

Вот несколько полезных сигналов, которые вы можете найти в процессе:

  • SIGHUP - зависание
    Сообщает программе, что пользователь отключен (например, сеанс SSH или окно терминала закрыто).
    Обычно делает изящное завершение программы.
  • SIGINT - прерывание
    Отправляется, когда вы нажимаете CTRL + C
    Обычно означает «остановить то, что вы делаете» - может или не может убить программу.
  • SIGTERM - завершение
    По умолчанию отправлено kill и killall .
    Обычно это завершает программу ... иногда после завершения программы все, что она делает.
  • SIGSTOP - остановка
    Отправляется, когда вы нажимаете CTRL + Z
    Приостанавливает программу, описанную выше.
  • SIGPIPE - закрыта труба
    Сообщает программе, что трубопровод закрыт. Обычно завершает программу.
    Например, cat /etc/passwd | head -n1 отправит SIGPIPE в процесс cat после того, как будет напечатана первая строка, в результате чего cat завершится до завершения всего файла.

Хотя все эти сигналы происходят «естественно» в их собственной настройке, вы можете использовать сигнал, чтобы подделать условие для достижения желаемого результата.

Например, если вы хотите прервать чей-то сеанс SSH, вы можете просто убить процесс, но тем самым вы не позволите ему обновить его файл HISTORY, что может быть важно по соображениям безопасности. Но вместо этого, если вы отправите его SIGHUP , тогда процесс будет считать, что соединение скончалось и выполнит стандартную очистку.

    
ответ дан tylerl 05.09.2012 в 06:34
6

kill -9 Значение: процесс будет уничтожен ядром; этот сигнал нельзя игнорировать. 9 означает сигнал KILL, который не является уловимым или невосприимчивым

Использует: SIGKILL singal

Убить Значение: команда kill без какого-либо сигнала передает сигнал 15, который завершает процесс обычным способом.

Использует: SIGTERM сигнал, который может обрабатываться программистами

    
ответ дан devav2 04.09.2012 в 18:21