阻止处理程序的信号

时间:2013-11-16 00:01:48

标签: c shell signals blocking sigchld

我为每个信号设置了一个处理程序(SIGCHLD,SIGTSTP,SIGINT),现在我需要在某些处理程序运行时阻止其他信号。
有一些资源,如sigaction(2)Blocking for Handler,但我不明白在我的情况下应该怎么做或如何使用代码。
信息很少:
处理程序:sigchldHandler,sigintHandler,sigtstpHander => signals.c
有一个名为smash.c的文件,它包含一个无限循环来获取命令。
提前谢谢

1 个答案:

答案 0 :(得分:4)

设置sigaction时,您可以指定在处理程序运行时应阻止的信号掩码。

你这样使用它:

struct sigaction act;
sigset_t set;

memset(&act,0,sizeof act);
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
sigaddset(&set, SIGSTP);

act.sa_mask = set;
act.sa_handler = sigchldHandler;
act.sa_flags = SA_RESTART;

sigaction(SIGCHLD, &act, NULL);

当您的SIGCHLD处理程序正在运行时,这将阻止SIGUSR1和SIGSTP。对你的另外两个处理程序也一样。