убить (команда)
Оригинальный автор(ы) | AT&T Bell Laboratories |
---|---|
Разработчик(и) | Различные с открытым исходным кодом и коммерческие разработчики разработчики |
Первоначальный выпуск | февраль 1973 года |
Операционная система | Unix , Unix-подобные , Plan 9 , Inferno , OS-9 , Windows , ReactOS , Singularity , IBM i |
Платформа | Кросс-платформенный |
Тип | Команда |
Лицензия | ReactOS: LGPL-2.1 или новее |
В вычислениях , kill
— это команда , которая используется в нескольких популярных операционных системах для отправки сигналов запущенным процессам .
Реализации
[ редактировать ]Unix и Unix-подобные
[ редактировать ]В Unix и Unix-подобных операционных системах kill
— это команда , используемая для отправки сигнала процессу. По умолчанию отправленное сообщение является сигналом завершения процесса , который запрашивает завершение . Но слово «убить» — это неправильное слово; отправленный сигнал может не иметь ничего общего с уничтожением процесса. kill
команда представляет собой обертку вокруг kill()
системный вызов , который отправляет сигналы процессам или группам процессов в системе, на которые ссылаются их числовые идентификаторы процессов (PID) или идентификаторы групп процессов (PGID). kill
всегда предоставляется как отдельная утилита, как это определено стандартом POSIX . Однако большинство оболочек имеют встроенные kill
команды, которые могут немного отличаться от него. [1] [2]
Существует множество различных сигналов, которые можно отправить (полный список см . в разделе «Сигнал »), хотя пользователи обычно больше всего интересуются сигналами SIGTERM («завершить») и SIGKILL («уничтожить»). По умолчанию отправляется сигнал SIGTERM. Программы, обрабатывающие этот сигнал, могут выполнять полезные операции очистки (например, сохранять информацию о конфигурации в файл) перед завершением работы. Однако многие программы не реализуют специальный обработчик для этого сигнала, поэтому вместо этого вызывается обработчик сигнала по умолчанию. В других случаях даже процесс, имеющий специальный обработчик, выходит из строя, что не позволяет ему правильно обработать сигнал.
Все сигналы, за исключением SIGKILL и SIGSTOP («стоп»), могут быть «перехвачены» процессом, а это означает, что при получении программой этих сигналов может быть вызвана специальная функция. Два исключения SIGKILL и SIGSTOP видны только ядру хост-системы , обеспечивая надежные способы контроля выполнения процессов. SIGKILL завершает процесс, а SIGSTOP приостанавливает его до тех пор, пока не будет получено SIGCONT («продолжить»). [3]
Unix предоставляет механизмы безопасности, предотвращающие завершение других процессов неавторизованными пользователями. По сути, чтобы один процесс мог отправить сигнал другому, владелец сигнального процесса должен совпадать с владельцем принимающего процесса или быть суперпользователем .
Все доступные сигналы имеют разные имена и сопоставлены с определенными номерами. Конкретное сопоставление чисел и сигналов может различаться в разных реализациях Unix. SIGTERM часто имеет номер 15, а SIGKILL — номер 9.
Примеры
[ редактировать ]Процессу можно отправить сигнал SIGTERM четырьмя способами (в данном случае идентификатор процесса — «1234»):
kill 1234
kill -s TERM 1234
kill -TERM 1234
kill -15 1234
Процессу можно отправить сигнал SIGKILL тремя способами:
kill -s KILL 1234
kill -KILL 1234
kill -9 1234
Другие полезные сигналы включают HUP, TRAP, INT, SEGV и ALRM. HUP отправляет сигнал SIGHUP . Некоторые демоны, включая Apache и Sendmail , перечитывают файлы конфигурации после получения SIGHUP, поэтому для этого также можно использовать команду kill. Сигнал SIGINT можно сгенерировать очень просто, нажав CTRL+ C в большинстве оболочек Unix . Это также характерно для CTRL+ Z быть сопоставлен с SIGTSTP («конечная остановка»), а для CTRL+ \ (обратная косая черта) для сопоставления с SIGQUIT , что может заставить программу сделать дамп ядра .
Сопутствующие программы
[ редактировать ]- 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-сервером закрыто.
Микропрограммное обеспечение ОС-9
[ редактировать ]The kill
Команда также доступна в виде оболочки, встроенной в оболочку OS-9 . Он используется для уничтожения другого процесса по идентификатору процесса. [4]
Остановите процесс с идентификатором процесса «7»:
$ kill 7
Microsoft Windows и ReactOS
[ редактировать ]В интерпретаторе командной строки Microsoft Windows PowerShell kill
— это предопределенный псевдоним команды для Stop-Process
командлет .
Microsoft Windows XP , Vista и 7 включают команду taskkill
[5] завершить процессы. Обычный синтаксис этой команды: taskkill /im "IMAGENAME"
. «Неподдерживаемая» версия kill
был включен в несколько выпусков Microsoft Windows Resource Kits, доступных для Windows 98. [6]
GNU -версии kill
были портированы через Cygwin и запускались внутри подсистемы среды Unix, которую предоставляют Microsoft Windows Services для UNIX (Microsoft приобрела Windows Services for Unix оптом путем покупки Softway Systems и их продукта Interix 17 сентября 1999 г.). [7]
Реализация ReactOS основана на варианте Windows. Его разработали Эндрю Риеди, Эндрю Нгуен и Хэ Янг. Он распространяется по лицензии LGPLv2.1 или более поздней версии. [8]
Примеры
[ редактировать ]Найдите все процессы, начинающиеся на букву «p», разработанные Microsoft и использующие более 10 МБ памяти, и убейте их:
PS C:\> ps p* | where { $_.Company -like "Microsoft*" -and $_.WorkingSet -gt 10MB } | kill -confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "powershell (6832)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "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
Microsoft Сингулярность
[ редактировать ]Оболочка Singularity , стандартная оболочка для Research Microsoft микроядерной операционной системы Singularity, включает в себя kill
команда для завершения фоновых процессов.
Примеры
[ редактировать ]Остановите процесс с именем «SampleProcess»:
Singularity>kill SampleProcess
Остановите процесс с идентификатором процесса «42»:
Singularity>kill 42
План 9 от Bell Labs
[ редактировать ]Согласно Плану 9 от Bell Labs , программа уничтожения фактически не выполняет это завершение и не принимает идентификаторы процессов. Скорее, он принимает фактические имена процессов и выводит команды для rc , оболочки, используемой Plan 9, для завершения процесса. [9]
Подобная предоставленная команда называется slay
, который делает то же самое, но для процессов, которые отказываются завершаться таким образом. [9]
Примеры
[ редактировать ]Например, чтобы уничтожить все экземпляры troff , введите:
kill troff | rc
Другие
[ редактировать ]The Команда kill также была перенесена в операционную систему IBM i . [10]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Справочное руководство Bash: Встроенные функции управления заданиями» . Проект GNU . Проверено 24 февраля 2015 г.
- ^ «zsh: 17. Встроенные команды оболочки» . Проверено 24 февраля 2015 г.
- ^ "<сигнал.h>" . Базовые спецификации открытой группы, выпуск 7 . Проверено 24 февраля 2015 г.
- ^ Пол С. Даян (1992). OS-9 Guru-1: Факты . Галактика Индастриал Лимитед. ISBN 0-9519228-0-7 .
- ^ «Тасккилл» . Microsoft TechNet . Проверено 24 февраля 2015 г.
- ^ «Утилиты Resource Kit — Windows '98 Resource Kit» . Программное обеспечение ActiveXperts . Архивировано из оригинала 25 мая 2019 г. Проверено 24 февраля 2015 г.
- ^ «Утилиты GNU для Win32» . Архивировано из оригинала 9 февраля 2006 г. Проверено 24 февраля 2015 г.
- ^ реакции/taskkill.c на мастере · реакции/реактос · GitHub
- ^ Jump up to: а б «Трансляция команд UNIX в Plan 9» . План 9 вики . Архивировано из оригинала 5 сентября 2008 г. Проверено 24 февраля 2015 г.
- ^ ИБМ . «IBM System i Версия 7.2 Программирование Qshell» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
Дальнейшее чтение
[ редактировать ]- МакЭлхирн, Кирк (2006). Командная строка Mac OS X: Unix под капотом . Джон Уайли и сыновья . ISBN 978-0470113851 .
Внешние ссылки
[ редактировать ]- Команда: Единая спецификация UNIX , версия 4 от Open Group. – Справочник по оболочке и утилитам,
- Системный вызов: Единая спецификация UNIX , версия 4 от Открытой группы. – Справочник по системным интерфейсам,
- Plan 9 , том 1 Руководство программиста –
- Inferno по общим командам Руководство –
- Linux пользователя по командам Руководство –