/*
* Blocked calculation 执行过程中, 信号 kill -INT xxx 被屏蔽, 所以程序没有反映
* 只有到信号被取消阻塞的时程序才会结束
* 信号屏蔽只是将信号加入到信号阻塞集合之中, 并没有丢弃, 一旦信号屏蔽取消, 信号就会发生作用
*/
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
sigset_t intmask;
int i, repeat_factor = 10;
sigemptyset(&intmask);
sigaddset(&intmask, SIGINT); // 添加 block 或 unblock 的信号
// sigaddset(&intmask, SIGTERM);
while(1) {
sigprocmask(SIG_BLOCK, &intmask, NULL); // block
fprintf(stderr,"SIGINT signal blocked\n");
for(i = 0; i < repeat_factor; i++) {
sleep(1);
fprintf(stdout, "[%d] calculating...\n", i);
}
fprintf(stdout, "Blocked calculation is finished\n");
sigprocmask(SIG_UNBLOCK, &intmask, NULL); // unblock
fprintf(stdout, "SIGINT signal unblocked\n");
for(i = 0; i < repeat_factor; i++) {
sleep(1);
fprintf(stdout, "[%d] calculating...\n", i);
}
fprintf(stdout, "Unblocked calculation is finished\n");
}
exit(0);
}
0 件のコメント:
コメントを投稿