Вы знаете, где я могу видеть список сигналов и функций, которые нельзя использовать вместе с командой sleep()?Linux: расчесывание sleep() с сигналами
Например, вы можете увидеть этот код:
// this program presents how to block signal SIGINT
// while running in critical region
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
static void sig_int(int);
int main(void) //6
{
sigset_t newmask, oldmask, zeromask;
if (signal(SIGINT, sig_int) == SIG_ERR)
fprintf(stderr,"signal(SIGINT) error");
sigemptyset(&zeromask);
sigemptyset(&newmask);
sigaddset(&newmask, SIGINT);
/* block SIGINT and save current signal mask */
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
fprintf(stderr,"SIG_BLOCK error");
/* critical region of code */
printf("In critical region: SIGINT will be blocked for 3 sec.\n");
printf("Type Ctrl-C in first 3 secs and see what happens.\n");
printf("Then run this program again and type Ctrl-C when 3 secs elapsed.\n");
fflush(stdout);
sleep(3);
printf("end sleep");
/* allow all signals and pause */
if (sigsuspend(&zeromask) != -1)
fprintf(stderr,"sigsuspend error");
printf("after return from sigsuspend: ");
/* reset signal mask which unblocks SIGINT */
if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
fprintf(stderr,"SIG_SETMASK error");
/* and continue processing ... */
exit(0);
}
static void sig_int(int signo)
{
printf("\nIn sig_int: SIGINT\n"); fflush(stdout);
return;
}
Программа не проснуться после сна(). Ты знаешь почему?
Вы уверены, что доходит до сна ?. Это может быть зависание на fflush (stdout), например. если диск заполнен или какой-либо другой фактор предотвращает завершение работы fflush. – dww
Как вы знаете, что это «не проснется»? Возможно, вы страдаете от буферизации (http://stackoverflow.com/q/2160469/132382) и вам нужна новая строка в вашем printf() (или fflush()), если вы используете это из буферизированной строки Терминал. – pilcrow
@pilcrow, Вы правы! Добавление символа новой строки DID решает эту проблему. Можете ли вы дать мне ссылку на некоторые объяснения о терминале с линейной буферизацией? – CrazySynthax