c - 处理程序的阻塞信号

标签 c shell signals blocking sigchld

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

最佳答案

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

关于c - 处理程序的阻塞信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20012787/

相关文章:

c - 在linux中为正在运行的程序设置环境变量

python - 如何禁用控制字符的 shell 拦截?

Linux - 获取文件/目录列表和拥有它的用户名

c++ - Sigaction 的替代方案

c++ - 如何检测 Linux/MacOs 平台中的内存泄漏?

c++ - 如何在 Linux 上初始化共享库

c - 我创建了一个将二进制转换为十进制的代码,但不能处理超过 10 位的代码

c - 关于C上struct的算法

macos - 在终端中打印文件的特定行

mysql - apt-get : command not found in mysql docker CLI