Введение

Команда в нескольких ОС для завершения процесса.

Британский научно-фантастический триллер 2016 года.

В информатике, команда kill используется в нескольких популярных операционных системах для отправки сигналов запущенным процессам.

Unix и Unix-подобные

В Unix и Unix-подобных операционных системах, команда `kill` используется для отправки сигнала процессу. По умолчанию отправляется сигнал завершения, который запрашивает выход процесса. Однако, название `kill` несколько вводит в заблуждение, поскольку отправленный сигнал может не иметь отношения к завершению процесса. Команда `kill` является оберткой над системным вызовом `kill`, который отправляет сигналы процессам или группам процессов в системе, идентифицируемым по их числовым идентификаторам процесса (PID) или идентификаторам группы процессов (PGID). `kill` всегда предоставляется как отдельная утилита, как определено стандартом POSIX. Тем не менее, большинство оболочек имеют встроенные команды `kill`, которые могут незначительно отличаться от неё. Существует множество различных сигналов, которые можно отправить (см. статью о сигналах для полного списка), хотя пользователи обычно наиболее заинтересованы в сигналах SIGTERM ("завершить") и SIGKILL ("убить"). Сигналом по умолчанию является SIGTERM. Программы, обрабатывающие этот сигнал, могут выполнять полезные операции очистки (например, сохранять информацию о конфигурации в файл) перед завершением работы. Однако многие программы не реализуют специальный обработчик для этого сигнала, и в этом случае вызывается обработчик сигнала по умолчанию. Иногда даже процесс, имеющий специальный обработчик, может работать некорректно и не сможет правильно обработать сигнал. Все сигналы, кроме SIGKILL и SIGSTOP ("остановить"), могут быть "перехвачены" процессом, то есть при получении этих сигналов может вызываться специальная функция. Два исключения, SIGKILL и SIGSTOP, видны только ядру хост-системы, обеспечивая надежные способы управления выполнением процессов. SIGKILL завершает процесс, а SIGSTOP приостанавливает его до получения SIGCONT ("продолжить"). Unix предоставляет механизмы безопасности для предотвращения несанкционированного завершения других процессов. По сути, для отправки сигнала от одного процесса к другому, владелец отправляющего процесса должен быть либо тем же, что и владелец принимающего процесса, либо суперпользователем. Все доступные сигналы имеют разные имена и соответствуют определенным номерам. Важно отметить, что конкретное соответствие между номерами и сигналами может различаться в разных реализациях Unix. SIGTERM часто имеет номер 15, а SIGKILL – номер 9.

Связанные программы

killall на некоторых вариантах Unix, таких как Solaris, эта утилита автоматически вызывается при завершении работы системы. Она работает аналогично команде kill, описанной выше, но вместо отправки сигнала отдельному процессу, сигнал отправляется всем процессам в системе. Однако в других системах, таких как IRIX, Linux и FreeBSD, необходимо указать аргумент, определяющий имя процесса (или процессов), которые нужно завершить. Например, чтобы завершить процесс, такой как экземпляр музыкального проигрывателя XMMS, запущенный командой xmms, пользователь должен выполнить команду killall xmms. Это завершит все процессы с именем xmms, что эквивалентно команде kill `pidof xmms` в системах, подобных Solaris. pkill посылает сигналы процессам на основе их имени и других атрибутов. Она была представлена в Solaris 7 и впоследствии пере реализована для Linux, NetBSD и OpenBSD. pkill значительно упрощает завершение процессов по имени: например, чтобы завершить процесс с именем firefox без pkill (и без pgrep), потребовалось бы ввести kill `ps no headers C firefox o pid`, в то время как с pkill достаточно просто ввести pkill firefox. xkill если вызвать без параметров, курсор мыши меняется со стрелки на значок "x", и пользователь может щелкнуть по окну, чтобы заставить X-сервер разорвать соединение с клиентом, владеющим этим окном. Это часто приводит к завершению процесса, когда он обнаруживает разрыв соединения с X-сервером.

Microsoft Windows и ReactOS

В интерпретаторе командной строки Microsoft Windows PowerShell, команда `kill` является предопределённым псевдонимом для командлета Stop-Process. В Microsoft Windows XP, Vista и 7 включена команда `taskkill` для завершения процессов. Обычно синтаксис этой команды выглядит как `taskkill /im "IMAGENAME"`. "Неподдерживаемая" версия `kill` была включена в несколько выпусков Microsoft Windows Resource Kits, доступных для Windows 98. Версии `kill` от GNU были портированы через Cygwin и работают в подсистеме Unix-среды, предоставляемой Microsoft Windows Services for UNIX (Microsoft приобрела Windows Services for Unix целиком, выкупив Softway Systems и их продукт Interix 17 сентября 1999 года). Реализация в ReactOS основана на варианте для Windows. Она была разработана Эндрю Риди, Эндрю Нгуеном и Хе Яном. Она лицензируется под LGPLv2.1 или более поздней версией.

Microsoft Singularity (Сингулярность Майкрософт)

Shell сингулярности, стандартная оболочка для микроядерной операционной системы Singularity от Microsoft Research, включает команду kill для завершения фоновых процессов.

План 9 из лаборатории Белла

Согласно Плану 9 из лаборатории Белл, программа `kill` фактически не выполняет завершение процесса и не принимает идентификаторы процессов. Вместо этого она принимает фактические имена процессов и выдает команды для `rc`, оболочки, используемой в Плане 9, для завершения процесса. Существует аналогичная команда `slay`, которая делает то же самое, но для процессов, которые отказываются завершаться таким образом.