#include <signal.h>
#include <sys/types.h>
int kill(pid_t pid, int signo);
отправляет сигнал signo
pid >0 | Отправляется процессу с этим pid |
То сигнал отправляется всем процессам, принадлежащим той же группе что и вызывающий процесс. | |
-1 | Сигнал отправляется всем процессам, для которых у вызывающего процесса есть разрешение на отправку сигнала. |
<-1 | Сигнал отправляется группе процессов, id которых равно |pid| |
Пользователь может отправить сигнал тому процессу, владельцем которого он является.
При успешном завершении kill возвращает 0 (успех - отправка хотя бы одного сигнала), а в случае ошибки возвращается -1, и устанавливается код ошибки
EINVAL Недопустимый сигнал.
EPERM Недостаточно полномочий для отправки сигнала
ESRCH Елси указанный процесс/группа процессов не существует.
Наборы сигналов
Понимается некоторое множество сигналов, к которым оперирует процесс. Есть действия системные вызовы которые позволяют наборы сигналов, и проверять наличие какого-то сигнала в наборе сигналов. Для определения набора сигналов есть специальный тип: sigset_t
#include <signal.h>
int sigemptyset(sigset_t *set);//инициализирует набор сигналов, и помечает его как пустой. Возвращает 0
int sigfillset(sigset_t *set); //инициализирует набор сигналов, и помечает кго как полный(все присутствуют). Возвращает 0
int sigaddset(sigset_t *set, int signo);//добавить сигнал в набор
int sigdelset(sigset_t *set, int signo);//удалить сигнал из набора. Возвращает 0 – успешно. -1 если ошибка.
int sigismember(const sigset_t *set, int signo) 1 – если проверяемый сигнал находится в наборе. 0 если сигнал отсутствует в наборе. -1 при ошибке.