KILL(1)

НАЗВА
kill - переривання процесу

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

kill [-signal|-s signal|-p] [-q value] [-a] [--timeout milliseconds signal] [--] pid|pid:_pidfd_inode_|name...

kill [-signal|-s signal] pid|pid:_pidfd_inode_...

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», і його призначено для позначення групи процесів, або спочатку має бути вказано сигнал, або перед аргументом має бути вказано параметр «--». Якщо цього не зроблено, аргумент вважатиметься сигналом, який слід надіслати.

pid:_pidfd_inode_
    A process can be referenced by its pid plus pidfd_inode (pid:pidfd_inode), to uniquely identify it and perform race-free signalling. This works only for the options -s, --signal and -signal. Requires kernel version 6.9 and later.

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

ПАРАМЕТРИ

-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

    If neither NUMBER nor 0xSIGMASK is given, list all signal names. In that case, print one signal per line when the output is not a terminal.

-L, --table
    Similar to -l, but it will print signal names and their corresponding numbers. Print one signal per line when the output is not a terminal.

-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

-h, --help
    Вивести текст довідки і завершити роботу.

-V, --version
    Показати дані щодо версії і завершити роботу.

СТАН ВИХОДУ

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

0
    успіх

1
    помилка

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

ЗАУВАЖЕННЯ

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

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

АВТОРИ

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

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

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

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

Для звітування щодо вад скористайтеся

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

Програма kill є частиною пакунка util-linux, який можна отримати з