Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практична робота 8.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
232.96 Кб
Скачать

Системний виклик kill() і команда kill

Зі всіх перерахованих раніше в розділі "Апаратні переривання (interrupt), виключення (exception), програмні переривання (trap, software interrupt). Їх обробка" джерел сигналу користувачу доступні тільки два – команда kill і посилка сигналу процесу за допомогою системного виклику kill(). Команда kill звичайно використовується в наступній формі:

kill [-номер] pid

Тут pid – це ідентифікатор процесу, якому посилається сигнал, а номер – номер сигналу, який посилається процесу. Послати сигнал (якщо у вас немає повноважень суперкористувача) бути можна тільки процесу, у якого ефективний ідентифікатор користувача співпадає з ідентифікатором користувача, що посилає сигнал. Якщо параметр –номер відсутній, то посилається сигнал SIGTERM, звичайно має номер 15, і реакція на нього за умовчанням – завершити роботу процесу, який одержав сигнал.

Команда kill

kill [-signal] [--] pid

kill -l

Опис команди

Команда kill призначена для передачі сигналу одному або декільком специфікованим процесам в рамках повноважень користувача.

Параметр pid визначає процес або процеси, яким доставлятимуться сигнали. Він може бути заданий одним з наступних чотирьох способів:

  • Число n > 0 – визначає ідентифікатор процесу, якому буде доставлений сигнал.

  • Число 0 – сигнал буде доставлений всім процесам поточної групи для даного управляючого терміналу.

  • Число -1 з передуючою опцією -- – сигнал буде доставлений (якщо дозволяють повноваження) всім процесам з ідентифікаторами, великими 1.

  • Число n < 0, де n не рівно -1, з передуючою опцією -- – сигнал буде доставлений всім процесам з групи процесів, ідентифікатор якої рівний -n.

Параметр -signal визначає тип сигналу, який повинен бути доставлений, і може задаватися в числовій або символьній формі, наприклад -9 або -SIGKILL. Якщо цей параметр опущений, процесам за умовчанням посилається сигнал SIGTERM.

Послати сигнал (не маючи повноважень суперкористувача) бути можна тільки процесу, у якого ефективний ідентифікатор користувача співпадає з ідентифікатором користувача, що посилає сигнал.

Опція -l використовується для отримання списку сигналів, існуючих в системі в символьній і числовій формах.

В багатьох операційних системах передбачені ще і додаткові опції для команди kill.

При використовуванні системного виклику kill() послати сигнал (не маючи повноважень суперкористувача) бути можна тільки процесу або процесам, у яких ефективний ідентифікатор користувача співпадає з ефективним ідентифікатором користувача процесу, що посилає сигнал.

Системний виклик kill()

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid, int signal);

Опис системного виклику

Системний виклик kill() призначений для передачі сигналу одному або декільком специфікованим процесам в рамках повноважень користувача.

Послати сигнал (не маючи повноважень суперкористувача) бути можна тільки процесу, у якого ефективний ідентифікатор користувача співпадає з ефективним ідентифікатором користувача для процесу, що посилає сигнал.

Аргумент pid описує, кому посилається сигнал, а аргумент sig – який сигнал посилається. Цей системний виклик уміє робити багато різних речей, залежно від значення аргументів:

  • Якщо pid > 0 і sig > 0, то сигнал номером sig (якщо дозволяють привілеї) посилається процесу з ідентифікатором pid.

  • Якщо pid = 0, а sig > 0, то сигнал з номером sig посилається всім процесам в групі, до якої належить посилаючий процес.

  • Якщо pid = -1, sig > 0 і посилаючий процес не є процесом суперкористувача, то сигнал посилається всім процесам в системі, для яких ідентифікатор користувача співпадає з ефективним ідентифікатором користувача процесу, що посилає сигнал.

  • Якщо pid = -1, sig > 0 і посилаючий процес є процесом суперкористувача, то сигнал посилається всім процесам в системі, за винятком системних процесів (звичайно всім, окрім процесів з pid = 0 і pid = 1).

  • Якщо pid < 0, але не –1, sig > 0, то сигнал посилається всім процесам з групи, ідентифікатор якої рівний абсолютному значенню аргументу pid (якщо дозволяють привілеї).

  • Якщо значення sig = 0, то проводиться перевірка на помилку, а сигнал не посилається, оскільки всі сигнали мають номери > 0. Це можна використовувати для перевірки правильності аргументу pid (чи є в системі процес або група процесів з відповідним ідентифікатором).

Значення, що повертається

Системний виклик повертає 0 при нормальному завершенні і –1 при помилці.