Системное программирование в UNIX средствами Free Pascal

       

Пример игнорирование сигнала SIGINT


Для того чтобы процесс игнорировал сигнал прерывания SIGINT, все, что нужно для этого сделать – это заменить следующую строку в программе:

act.handler.sh := @catchint;

на

act.handler.sh := SIG_IGN;

После выполнения этого оператора нажатие клавиши прерывания будет безрезультатным. Снова разрешить прерывание можно так:

act.handler.sh := SIG_DFL;

sigaction (SIGINT, @act, nil);

Можно игнорировать сразу несколько сигналов, например:

act.handler.sh := SIG_IGN;

sigaction(SIGINT, @act, nil);

При этом игнорируются оба сигнала SIGINT и SIGQUIT. Это может быть полезно в программах, которые не должны прерываться с клавиатуры.

Некоторые командные интерпретаторы используют этот подход, чтобы гарантировать, что фоновые процессы не останавливаются при нажатии пользователем клавиши прерывания. Это возможно вследствие того, что игнорируемые процессом сигналы будут игнорироваться и после вызова ехес. Поэтому командный интерпретатор может вызвать sigaction для игнорирования сигналов SIGQUIT и SIGINT, а затем запустить новую программу при помощи вызова ехес.



Содержание раздела