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

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

kill -9 212121

и

kill 212121
41 голос | спросил user784637 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 04 Sep 2012 22:05:55 +0400 2012, 22:05:55

4 ответа


24

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

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

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

  

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


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

ответил SirCharlo 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 04 Sep 2012 22:12:39 +0400 2012, 22:12:39
37

Команда убить отправит определенный сигнал для процесса с заданным идентификатором (PID):

kill -<signal> <pid>

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

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

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

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

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

  • TERM : приложение сможет завершить работу, то есть правильно запустить процедуру отключения.
  • KILL : приложения немедленно останавливаются и убиваются (что может привести к потере данных или повышению соответствия для сообщения предполагаемый сбой в некоторых случаях).
ответил Takkat 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 04 Sep 2012 22:32:17 +0400 2012, 22:32:17
13

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

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 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 05 Sep 2012 10:34:28 +0400 2012, 10:34:28
6

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

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

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

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

ответил devav2 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 04 Sep 2012 22:21:32 +0400 2012, 22:21:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132