Архив документации OpenNet.ru /
Раздел "Программирование в Linux" /
Индекс
Next: Работа с сигналами в
Up: Сигналы
Previous: Понятие о сигналах
Contents
Функция raise() имеет следующий вид:
-
- #include <signal.h>
int raise(int sig);
С помощью функции raise() можно посылать программные сигналы
типа sig в исполняемую программу. Если программа установила
обработчик сигнала для указанного типа sig, эта процедура
будет выполнена. Если никакой обработчик не установлен, будет выполнено
стандартное действие (SIG_DFL) для данного типа сигнала.
В примере ниже приведена программа, которая запрашивает ввод двух
чисел для деления. Если делитель равен 0, программе посылается сигнал
SIGFPE, чтобы завершить ее:
-
- #include <signal.h>
int main()
{
int a,b;
printf("Число : ");
scanf("%d",&a);
printf("делится на : ");
scanf("%d",&b);
if(b==0)
raise(SIGFPE);
else
printf("Результат = %d\n",a/b);
return 0;
}
Для передачи сигнала некоторому процессу применяется функция kill(),
синтаксис которой приведен ниже.
-
- #include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int signalnumber);
Запись kill(getpid(), signalnumber) эквивалентна вызову
raise(signalnumber).
После вызова kill() в записи таблиц целевого процесса устанавливается
соответствующий сигналу бит. Кроме того, должны быть выполнены следующие
условия:
- эффективный идентификатор пользователя равен 0 (пример root);
- эффективный или реальный идентификатор пользователя соответствует
идентификатору владельца целевого процесса;
- в случае ошибки kill возвращает -1, иначе 0.
2004-06-22
Архив документации на OpenNet.ru