KILL(1) Команди користувача KILL(1)

НАЗВА

kill - переривання процесу

КОРОТКИЙ ОПИС

kill [-сигнал|-s сигнал|-p] [-q значення] [-a] [--timeout мілісекунди сигнал] [--] pid|назва...

kill -l [number|0xsigmask] | -L

kill -d pid

ОПИС

Команда kill надсилає вказаний сигнал вказаним процесам або групам процесів.

Якщо сигнал не вказано, буде надіслано сигнал TERM. Типовою дією у відповідь на цей сигнал є переривання роботи процесу. Цьому сигналу слід віддавати перевагу перед сигналом KILL (номер 9), оскільки процес може встановлювати обробник сигналу TERM з метою виконати заходи із чищення перед перериванням роботи у штатному режимі. Якщо роботу процесу не буде перервано після надсилання сигналу TERM, можна скористатися сигналом KILL, але слід зважати на те, що останній сигнал не може бути перехоплено, а отже, його використання не дасть цільовому процесу можливості виконати будь-яке чищення перед перериванням роботи.

У більшості сучасних командних оболонок є вбудована команда kill, користування якою є дуже подібним до команди, яку описано на цій сторінці підручника. Параметри --all, --pid та --queue та можливість вказувати процесів за назвою команди є локальними розширеннями можливостей.

Якщо значенням аргументу сигнал є 0, ніякого сигналу не буде надіслано, але буде виконано перевірку на помилки.

АРГУМЕНТИ

Список процесів, яким буде надіслано сигнали, може бути сумішшю назв і PID.

pid

Кожен запис pid можна вказати в один з таких способів:

n

де n є більшим за 0. Сигнал буде надіслано процесу із PID n.

0

Сигнал буде надіслано усім процесам поточної групи процесів.

-1

Сигнал буде надіслано усім процесам із PID, який перевищує 1.

-n

де n є більшим за 1. Сигнал буде надіслано усім процесам у групі процесів n. Якщо задано аргумент у формі «-n», і його призначено для позначення групи процесів, або спочатку має бути вказано сигнал, або перед аргументом має бути вказано параметр «--». Якщо цього не зроблено, аргумент вважатиметься сигналом, який слід надіслати.

_назва>

Сигнал буде надіслано усім процесам, які викликано з використанням цієї _назви>.

ПАРАМЕТРИ

-s, --signal _сигнал>

Сигнал, який слід надіслати. Можна вказати у формі назви або числа.

-l, --list [число|0xмаска-сигналу]

Вивести список назв сигналів, перетворити заданий номер сигналу на назву або перетворити задану маску сигналу на назви. Список сигналів наведено у файлі /usr/include/linux/signal.h.
$ ps s $$
  UID     PID          PENDING          BLOCKED          IGNORED           CAUGHT STAT TTY        TIME COMMAND
 1000 1608069 0000000000000000 0000000000000002 0000000000384000 0000000008013003 Ss   pts/44     0:02 zsh
$ kill -l 0x0000000000384000
TERM
TSTP
TTIN
TTOU

-L, --table

Подібний до -l, але призводить до виведення назв сигналів і відповідних їм чисел.

-a, --all

не обмежувати перетворення назв на pid процесами з тим самим UID, що і поточний процес.

-p, --pid

Вивести лише ідентифікатори іменованих процесів (PID), не надсилати жодних сигналів.

-r, --require-handler

Не надсилати сигнал, якого його не захоплено у просторі користувача процесу з сигналом.

--verbose

Вивести PID, яким буде надіслано сигнали kill разом із сигналами.

-q, --queue _значення>

Надіслати сигнал за допомогою sigqueue(3), а не kill(2). Аргументом значення є ціле число, яке буде надіслано разом із сигналом. Якщо процес-отримувач встановив обробник для цього сигналу за допомогою прапорця SA_SIGINFO sigaction(2), процес може отримати ці дані за допомогою поля si_sigval структури siginfo_t.

--timeout _мілісекунди сигнал>

Надіслати процесу сигнал, який визначено у звичний спосіб, а потім додатковий сигнал після вказаної затримки. Використання параметра --timeout призведе до того, що kill очікуватиме протягом періоду, який визначено аргументом мілісекунди, перш ніж надсилати наступний сигнал процесу. Цю можливість реалізовано з використанням можливості ядра Linux з використання дескрипторів файлів PID з метою гарантувати те, що наступний сигнал буде надіслано тому самому процесу або не буде надіслано взагалі, якщо процесу більше не існує.

Зауважте, що операційна система може повторно використовувати PID, і реалізація еквівалентної можливості у командній оболонці за допомогою kill і sleep може призвести до конкуренції, за якої наступний сигнал може бути надіслано іншому процесу, який повторно використав вже знищений PID.

Параметр --timeout може бути вказано декілька разів: сигнали буде надіслано послідовно із вказаними періодами очікування. Параметр --timeout може бути поєднано із параметром --queue.

Наприклад, вказана нижче команда надсилає сигнали QUIT, TERM та KILL послідовно і вмикає очікування у 1000 мілісекунд між надсиланнями сигналів:

kill --verbose --timeout 1000 TERM --timeout 1000 KILL \
        --signal QUIT 12345

-d, --show-process-state pid

Decode signal related fields in /proc/pid/status.
$ kill -d $$
Blocked: INT
Ignored: TERM TSTP TTIN TTOU
Caught: HUP INT PIPE ALRM CHLD WINCH

СТАН ВИХОДУ

У kill передбачено такі значення стану виходу:

0

успіх

1

помилка

64

частковий успіх (якщо вказано декілька процесів)

ЗАУВАЖЕННЯ

Хоча як аргумент kill можна вказати TID (ідентифікатор потоку обробки, див. gettid(2)) одного з потоків обробки у багатопотоковому процесі, сигнал все одно буде надіслано процесу (тобто усій групі потоків обробки). Іншими словами, не можна надіслати сигнал явно вказаному потоку обробки у багатопотоковому процесі. Сигнал буде отримано довільно вибраним потоком, який не блокує сигнал, у процесі призначення. Докладніший опис наведено на сторінці підручника signal(7) та в описі CLONE_THREAD на сторінці підручника clone(2).

У різних командних оболонках реалізовано вбудовані команди kill, які мають вищий пріоритет за виконуваний файл kill(1), який описано у цьому підручнику. Найпростішим способом забезпечення виконання саме команди, яку описано на цій сторінці, є використання повного шляху для виклику команди. Приклад: /bin/kill --version

АВТОРИ

Salvatore Valente <svalente@mit.edu>, Karel Zak <kzak@redhat.com>

Початкову версію було запозичено з BSD 4.4.

ТАКОЖ ПЕРЕГЛЯНЬТЕ

bash(1), tcsh(1), sigaction(2), kill(2), sigqueue(3), signal(7) proc(5) proc_pid_status(5)

ЯК НАДІСЛАТИ ЗВІТ ПРО ВАДИ

Для звітування щодо вад скористайтеся системою стеження за вадами https://github.com/util-linux/util-linux/issues

ДОСТУП ДО ПРОГРАМИ

Програма kill є частиною пакунка util-linux, який можна отримати з архіву ядра Linux https://www.kernel.org/pub/linux/utils/util-linux/.

2025-03-29 util-linux 2.41