next up previous contents
Next: Работа с сигналами в Up: Сигналы Previous: Понятие о сигналах.   Contents

Посылка сигналов с помощью raise() и kill()

Функция 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() в записи таблиц целевого процесса устанавливается соответствующий сигналу бит. Кроме того, должны быть выполнены следующие условия:



2003-12-09