Грузится

Наберите для поиска

kill

Программы

kill

Поговорим о команде kill. Ошибочно считается, что данная команда создана «убивать» процессы, а вот и нет! Оригинальная задача этой команды это передавать сигналы процессам. Дело в том, что операционная система должна иметь возможность «общаться» с процессами, которые она обслуживает. Ну например, из самого простого: запущена база данных, а операционная система хочет её перезапустить, потому что так решил системный администратор. Но просто прервать её исполнение и выбросить её из памяти грозит потерей данных. И по этому операционная система должна сообщить процессу о том что её собираются перезапустить, что бы дать ему шанс закончить обработку запросов, сохранить данные на жесткий диск, и так далее… Сигналов этих больше 30-ти и как-нибудь мы пройдемся по всем, но потом…

Общий вид запуска команды kill выглядит так:

kill -<сигнал> <номер процесса>

Полный список оставим на потом, а вот самые нужные я объясню:

1 — SIGHUP — сигнал закрытие контролирующего окна. Да да, это именно именно он закрывает запущенные программы когда вы вышли из терминала.
2 — SIGINT — Прервать выполнение процесса, процесс при этом удаляется из памяти, так же его можно послать с помощью ctrl-C текущему процессу.
3 — SIGQUIT — тоже самое что и ctrl-C, но сознает дамп процесса (core dump) можно послать текущему процессу при помощи ctl-/.

9 — SIGKILL — принудительное завершение процесса kill.

15 — SIGTERM — так называемый мягкий kill, который используется по умолчанию. Тот самый который позволяет процессу завершиться.

18 — SIGCONT — Продолжить процесс, ctrl-Z (второй)
19 — SIGSTOP — Прервать выполнение процесса, ctrl-Z (первый)

30 — SIGPWR — Сигнал о выключении питания.

По умолчанию kill посылает сигнал 15 — SIGTERM.
Передавать сигналы можно по номеру, по его длинному или короткому имени, то есть:

kill -15 <pid>
kill -SIGTERM <pid>
kill -TERM <pid>

 

на самом деле означает одно и тоже, добровольно закончить процесс.

Если процесс «встрял по полной» и никак не реагирует на SIGTERM операционная система всегда оставляет за собой право закончить процесс принудительно, при помощи SIGKILL. Ведь и правда, для такого «убийства» процесса все что нужно это пометить память занимаемую процессом как свободную, и выбросить процесс из списка процессов.

Для того что бы «поиграться» с командой kill попробуйте запускать команду yes переводя его в фоновый режим и переводя его стандартный вывод в нулевое устройство /dev/null вот так:

yes > /dev/null &

А с помощью ps получите номер процесса так:

ps -ef | grep yes

и попробуйте послать им какие-нибудь сигналы…

Всем удачи

Tags:

Оставьте коментарий

Your email address will not be published. Required fields are marked *