Посылка сигналов от процессов процессам осуществляется функцией
имеющей одноименное название с командой kill
Формат функции следующий:
kill(pid, signo), где pid – идентификатор процесса, которому посылается
сигнал, signo – номер сигнала.
Для получения подробной информации воспользуйтесь утилитой man
$man 2 kill (обратите внимание, что вам необходимо указать номер
секции, поскольку по утилита будет искать с 1-ой секции в которой есть
одноименный файл kill – описание команды kill)
Надежные и ненадежные сигналы
В настоящее время существует 2 класса сигналов: ненадежные
(unreliable) и надежные (reliable).
Ненадежные сигналы - это те, для которых вызванный однажды
обработчик сигнала не остается. Такие "сигналы-выстрелы" должны
перезапускать обработчик внутри самого обработчика, если есть желание
сохранить сигнал действующим. Из-за этого возможна ситуация гонок, в
которой сигнал может прийти до перезапуска обработчика - и тогда он будет
потерян, или придет вовремя - и тогда сработает в соответствии с заданным
поведением (например, убьет процесс). Такие сигналы ненадежны, поскольку
выборка сигнала и установка обработчика не являются атомарными
операциями.
Для переопределения реакции на сигнал в механизме ненадежных
сигналов используется функция signal() (смотри Пример использования
механизма ненадежных сигналов).
Описание функции signal()
#include <signal.h>
void(*signal(int signr, void(*sighandler)(int)))(int);
Такой прототип очень сложен для понимания. Следует упростить его,
определив тип для функции обработки.
typedef void signalfunction(int);
После этого прототип функции примет вид:
signalfunction *signal(int signr,signalfunction*sighandler);
122