В вычислительной технике — kill
команда , которая используется в нескольких популярных операционных системах для отправки сигналов запущенным процессам .
В Unix и Unix-подобных операционных системах — kill
это команда , используемая для отправки сигнала процессу. По умолчанию отправляемое сообщение — это сигнал завершения , который запрашивает завершение процесса . Но kill — это не совсем верное название; отправляемый сигнал может не иметь ничего общего с завершением процесса. kill
Команда представляет собой оболочку системного вызова , который отправляет сигналы процессам или группам процессов в системе, на которые ссылаются их числовые идентификаторы процессов (PID) или идентификаторы групп процессов (PGID). всегда предоставляется как отдельная утилита, как определено стандартом POSIX . Однако большинство оболочек имеют встроенные команды, которые могут немного отличаться от нее. [1] [2]kill()
kill
kill
Существует множество различных сигналов, которые могут быть отправлены (см. сигнал для полного списка), хотя сигналы, которые обычно больше всего интересуют пользователей, это SIGTERM («завершить») и SIGKILL («убить»). По умолчанию отправляется сигнал SIGTERM. Программы, которые обрабатывают этот сигнал, могут выполнять полезные операции очистки (например, сохранять информацию о конфигурации в файл) перед выходом. Однако многие программы не реализуют специальный обработчик для этого сигнала, и поэтому вместо него вызывается обработчик сигнала по умолчанию. В других случаях даже процесс, имеющий специальный обработчик, срабатывает неправильно, что не позволяет ему правильно обработать сигнал.
Все сигналы, за исключением SIGKILL и SIGSTOP («стоп»), могут быть «перехвачены» процессом, что означает, что специальная функция может быть вызвана, когда программа получает эти сигналы. Два исключения SIGKILL и SIGSTOP видны только ядру хост-системы , что обеспечивает надежные способы управления выполнением процессов. SIGKILL завершает процесс, а SIGSTOP приостанавливает его до получения SIGCONT («продолжить»). [3]
Unix предоставляет механизмы безопасности, чтобы не допустить несанкционированного завершения других процессов пользователями. По сути, для того, чтобы процесс мог отправить сигнал другому, владелец сигнального процесса должен быть тем же, что и владелец принимающего процесса, или быть суперпользователем .
Все доступные сигналы имеют разные имена и сопоставлены с определенными числами. Конкретное сопоставление чисел и сигналов может различаться в разных реализациях Unix. SIGTERM часто имеет номер 15, а SIGKILL часто имеет номер 9.
Процессу можно отправить сигнал SIGTERM четырьмя способами (в данном случае идентификатор процесса — «1234»):
убить 1234 убить -s TERM 1234 убить -TERM 1234 убить -15 1234
Процессу можно отправить сигнал SIGKILL тремя способами:
убить -s УБИТЬ 1234 убить -УБИТЬ 1234 убить -9 1234
Другие полезные сигналы включают HUP, TRAP, INT, SEGV и ALRM. HUP отправляет сигнал SIGHUP . Некоторые демоны, включая Apache и Sendmail , перечитывают файлы конфигурации при получении SIGHUP, поэтому для этого также можно использовать команду kill. Сигнал SIGINT можно сгенерировать очень просто, нажав CTRL+C в большинстве оболочек Unix . Также часто + сопоставляют с SIGTSTP («терминальная остановка»), а + (обратная косая черта) сопоставляют с SIGQUIT , что может заставить программу выполнить дамп ядра .CTRLZCTRL\
xmms
, пользователь должен выполнить команду killall xmms
. Это убьет все процессы с именем xmms
, и эквивалентно в kill `pidof xmms`
таких системах, как Solaris.kill `ps --no-headers -C firefox -o pid`
тогда как с pkill можно просто набрать pkill firefox
.Команда kill
также доступна как встроенная оболочка в оболочке OS-9 . Она используется для завершения другого процесса по идентификатору процесса. [4]
Остановите процесс с идентификатором процесса «7»:
$ убить 7
В интерпретаторе командной строки Windows PowerShell от Microsoft — kill
это предопределенный псевдоним команды для Stop-Process
командлета .
Microsoft Windows XP , Vista и 7 включают команду taskkill
[5] для завершения процессов. Обычный синтаксис для этой команды — taskkill /im "IMAGENAME"
. «Неподдерживаемая» версия kill
была включена в несколько выпусков Microsoft Windows Resource Kits, доступных для Windows 98. [6]
Версии GNUkill
были перенесены через Cygwin и работают внутри подсистемы среды Unix, которую предоставляет Microsoft Windows Services for UNIX (Microsoft приобрела Windows Services for Unix оптом, купив Softway Systems и ее продукт Interix 17 сентября 1999 года). [7]
Реализация ReactOS основана на варианте Windows. Она была разработана Эндрю Риеди, Эндрю Нгуеном и Хе Янгом. Она лицензирована под LGPLv2.1 или более поздней версией. [8]
Найдите все процессы, начинающиеся с буквы «p», которые были разработаны Microsoft и используют более 10 МБ памяти, и завершите их:
PS C:\> ps p * | где { $_ . Компания -типа "Microsoft*" -и $_ . WorkingSet -> 10MB } | kill -confirmПодтвердить Вы уверены, что хотите выполнить это действие? Выполнение операции "Stop-Process" на целевом объекте "powershell (6832)". [Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"): A PS C:\>
Вот более простой пример, который просит процесс Explorer.exe завершить работу:
PS C:\> taskkill / im explorer . exe
В этом примере процесс принудительно завершается:
PS C:\> taskkill / f / im explorer . exe
Процессы также можно завершить по их номеру PID :
PS C:\> taskkill / pid 3476
Оболочка Singularity , стандартная оболочка для микроядерной операционной системы Singularity компании Microsoft Research , включает команду для завершения фоновых процессов.kill
Остановите процесс с именем «SampleProcess»:
Сингулярность>убить SampleProcess
Остановите процесс с идентификатором процесса «42»:
Сингулярность>убить 42
В Plan 9 от Bell Labs программа kill на самом деле не выполняет это завершение и не принимает идентификаторы процессов. Вместо этого она принимает фактические имена процессов и выводит команды для rc , оболочки, используемой Plan 9, чтобы завершить процесс. [9]
Похожая команда называется slay
, которая делает то же самое, но для процессов, которые отказываются быть завершенными таким образом. [9]
Например, чтобы уничтожить все экземпляры troff , введите:
убить троффа | rc
Команда kill также была перенесена в операционную систему IBM i . [10]