signal和sleep函數混用的問題
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void proc_signal(int signal)
{
if (SIGINT == signal) {
printf("got a signal(%d) is SIGINT\n", signal);
exit(1);
} else if (SIGALRM == signal) {
printf("got a signal(%d) is SIGALRM\n", signal);
} else {
printf("got a signal(%d) is not SIGINT and SIGALRM\n", signal);
}
}
int main(int argc, char** argv)
{
printf("main start\n");
if (SIG_ERR == signal(SIGALRM, proc_signal)) {
printf("An error occurred while setting a SIGALRM handler.\n");
return 0;
}
if (SIG_ERR == signal(SIGINT, proc_signal)) {
printf("An error occurred while setting a SIGINT handler.\n");
return 0;
}
printf("set alarm 3\n");
alarm(3);
printf("main wait 180 sec\n");
sleep(180);
printf("main end\n");
return 0;
}
在Ubuntu 14.04測試會發現,alarm發出信號後,就讓main程式執行停止程序
在sleep的manual中有提到
sleep() may be implemented using SIGALRM; mixing calls to alarm(2) and sleep() is a bad idea.
所以manual也不建議混用signal和sleep函數。
留言