Функция сна будет прерываться при получении сигнала? - PullRequest
0 голосов
/ 12 марта 2012
#include <signal.h>
#include <stdio.h>

void ints(int i )
{
   printf("ints \n");
}


int main(void)
{
    signal(SIGINT, ints);
   sleep(10);  
}

введите Ctrl + C, программа немедленно прекратит работу с выводом:

^ints

Мне было интересно, почему, по моему мнению, программа должна завершиться через 10 секунд, независимо от того, сколько раз вводится Ctrl + C.

1 Ответ

2 голосов
/ 12 марта 2012

sleep () - это одна из тех функций, которая никогда не запускается при прерывании.

интересно, он также не возвращает EINT, как можно было бы ожидать.

Вместо этого возвращается успех с оставшимся временем сна.

См: http://www.kernel.org/doc/man-pages/online/pages/man7/signal.7.html подробности о других API, которые не перезапускаются при прерывании

...