2012-03-12 3 views
0
#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 является вход.

ответ

2

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

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

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

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

Смежные вопросы