act.sa_flags |= SA_RESTART; /* Разрешить повторный запуск */
ret = sigaction(sig, &act, NULL);
/* Поместить новые установки на место */
return ret; /* Вернуть результат */
}
В случае успеха возвращаемое значение равно 0 и -1 при ошибке.
10.6.7. Передача сигналов: kill()
killpg()Традиционная функция Unix для передачи сигналов называется kill()
killpg() посылает сигнал определенной группе процессов. Объявления следующие:#include
#include
int kill(pid_t pid, int sig);
int killpg(int pgrp, int sig); /* XSI */
Аргумент sig
kill() возвращает 0 в случае успеха и -1 при ошибке; errno указывает на проблему.Правила для значения pid
pid > 0
pid является номером процесса, и сигнал посылается этому процессуpid = 0
pid = -1
init (PID 1), но у других систем могут быть другие специальные процессы.pid < -1
pid. Таким образом, вы можете отправить сигнал всей группе процессов, дублируя возможности killpg(). Эта неортогональность обеспечивает историческую совместимость.Значение pid
kill() сходно со значением для waitpid() (см. раздел 9.1.6.1 «Использование функций POSIX: wait() и waitpid()»).Стандартная функция С raise()
int raise(int sig) {
return kill(getpid(), sig);
}
Комитет по стандартизации С выбрал имя raise()
kill() была сочтена специфичной для Unix функцией. Представилась также возможность дать этой функции более описательное имя.killpg()
pgrp превышает 1, эта функция эквивалентна 'kill(-pgrp, sig)'. Справочная страница GNU/Linux pgrp равно 0, сигнал посылается группе отправляющего процесса (Это то же самое, что и kill().)Как вы могли представить, нельзя послать сигнал произвольному процессу (если вы не являетесь суперпользователем, root
Однако SIGCONT
10.6.8. Наша история до настоящего времени, эпизод II
System V Release 3 API был предназначен для исправления различных проблем, представленных первоначальным API сигналов V7. В частности, важной дополнительной концепцией является понятие о блокировке сигналов.
Однако, этот API оказался недостаточным, поскольку он работал лишь с одним сигналом за раз, оставляя множество широко открытых окон, через которые могли поступать нежелательные сигналы. POSIX API, работая
sigset_t), решает эту проблему, закрывая окна.Первый набор функций, который мы исследовали, манипулирует значениями sigset_t
sigfillset(), sigemptyset(), sigaddset(), sigdelset() и sigismember().