Приложение к платформам ООН * Х.
Согласно справочной странице signal(2)
в GNU / Linux, поведение signal
не так переносимо, как поведение sigaction
:
Поведение signal () варьируется в зависимости от версии UNIX, а также
исторически различался в разных версиях Linux. Избегайте его
используйте: вместо этого используйте sigaction (2).
В System V система не блокировала доставку дальнейших экземпляров сигнала, и доставка сигнала сбросила бы обработчик к стандартному. В BSD семантика изменилась.
В следующем варианте предыдущего ответа Дирка Эддельбюттеля вместо signal
используется sigaction
:
#include <signal.h>
#include <stdlib.h>
static bool keepRunning = true;
void intHandler(int) {
keepRunning = false;
}
int main(int argc, char *argv[]) {
struct sigaction act;
act.sa_handler = intHandler;
sigaction(SIGINT, &act, NULL);
while (keepRunning) {
// main loop
}
}