Иногда некоторые программы выходят из под контроля и тогда вам нужно “поставить их на место”. Программа для такого вида администрирования называется kill(1). Также её можно использовать для управления процессами разными способами. Самым очевидным способом использования kill является убивание процесса (от англ. kill - убивать). Вам придётся воспользоваться этой программой в том случае, если программа вышла из под контроля и начинает использовать много системных ресурсов или если вас просто тошнит от её работы.
Чтобы убить процесс, вам нужно знать его PID или имя. Чтобы узнать идентификатор, воспользуйтесь командой ps, описанной в предыдущем разделе. Например, чтобы убить процесс 4747, вам нужно выполнить следующее:
% kill 4747 |
Учтите, чтобы убить процесс, вы должны быть его владельцем. Это особенность системы безопасности. Если бы вам разрешалось убивать процессы других пользователей, вы могли бы осуществлять всевозможные злоумышленные действия. Ну и, естественно, root может убить любой процесс в системе.
Существует ещё одна разновидность утилиты kill под название killall(1). Эта программа полностью соответствует своему названию (kill all - убить всех): она убивает все работающие процессы с заданным именем. Если вам нужно убить все процессы vim, вы можете набрать следующую команду:
% killall vim |
Все запущенные вам процессы с именем vim будут убиты. Выполнив эту команду под root'ом, вы убьёте также все процессы vim, запущенные пользователями системы. Это также представляет собой интересный способ для выбрасывания из системы всех пользователей (включая самого вас):
# killall bash |
Иногда обычный kill не справляется с поставленной задачей. Определённые процессы не будут умирать. Тогда вам нужно использовать более сильное средство. Если этот упрямый PID 4747 не отвечает на ваш запрос kill, вы можете выполнить следующее:
% kill -9 4747 |
Это наверняка заставит процесс 4747 умереть. То же самое вы можете использовать и с killall. В данном случае вы просто отправляете процессу другой сигнал. Обычный вызов kill отправляет процессу сигнал SIGTERM (terminate), который сообщает ему, что нужно остановить свою работу, сбросить буферы и выгрузить себя из памяти. kill -9 отправляет процессу сигнал SIGKILL (kill), который по сути просто убивает его. Процессу не разрешается “чисто” завершить свою работу, и иногда это приводит к нежелательным последствиям, таким как повреждение данных. Ниже представлен полный список сигналов. Вы можете получить этот список с помощью следующей команды:
% kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR |
В kill нужно использовать только числа, а в killall можно использовать названия сигналов без приставки “SIG”. Вот ещё один пример:
% killall -KILL vim |
И напоследок, одним из полезных вариантов использования kill является перезапуск процесса. Отправка большинству процессов сигнала SIGHUP заставит их повторно прочитать свои конфигурационные файлы. Это особенно полезно для сообщения системным процессам о том, что им нужно перечитать свои конфигурационные файлы после того, как вы их отредактировали.