Архив документации OpenNet.ru /
Раздел "Программирование, языки" /
Индекс
Next: Работа с сигналами в
Up: Сигналы
Previous: Понятие о сигналах.
Contents
Функция raise() имеет следующий вид:
-
- #include <signal.h>
int raise(int sig);
С помощью функции raise() можно посылать программные сигналы
типа sig в исполняемую программу. Если программа установила
обработчик сигнала для указанного типа sig, эта процедура
будет выполнена. Если никакой обработчик не установлен, будет выполнена
стандартное действие (SIG_DFL) для данного типа сигнала.
В примере ниже приведена программа, которая запрашивает ввод двух
чисел для деления. Если делитель равен 0, программе посылается сигнал
SIGFPE, чтобы завершить ее (рис. 7).
-
- #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;
}
Рис. 7. Использование raise().
Для передачи сигнала некоторому процессу существует функция 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.
2003-12-09
Архив документации на OpenNet.ru