1

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

4

1 回答 1

5

设置 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。对您的其他 2 个处理程序也执行相同的操作。

于 2013-11-16T00:18:28.470 回答