Tag: sigprocmask

信号执行期间的sigprocmask

我正在研究使用sigprocmask来阻止某些关键代码段执行时的某些信号(在本例中为SIGALRM和SIGCHLD )。 与这些信号相关联的两个信号处理程序都将访问和修改中央数据结构,因此在主进程处理它时阻止它们访问它是至关重要的。 目前,我的计划是在代码的关键部分开始时简单地禁用这些信号,然后在最后重新启用它们。 void criticalFunction(void) { // disable signals with sigprocmask // critical code // enable signals with sigprocmask } 但是,要阻塞的信号的信号处理程序也会调用criticalFunction 。 当他们调用sigprocmask函数并对自己的信号启用阻塞时会发生什么? 他们会停止还是继续执行? (或者某些第三个条件..) 我能找到的唯一一个注意事项如下: 如果在信号处理程序中调用sigprocmask(),则从处理程序返回可以通过恢复原始挂起信号掩码来撤消sigprocmask()的工作。 ( http://www.mkssoftware.com/docs/man3/sigprocmask.3.asp ) (这是我上一个问题的后续问题: 信号处理程序访问队列数据结构(竞争条件?) )

如何阻止C中的信号?

我正在尝试创建一个阻止信号SIGUSR1的程序,它会解锁信号。 在中间,我想看到使用sigpending阻止信号。 但它总是说信号没有被阻挡,我可以在信号被阻挡时使用它。 这是我的代码。 #include #include #include static void signals(int signaln) { switch (signaln) { case SIGUSR1: printf(“Signal SIGUSR1\n”); break; } return; } main() { sigset_t set,set2; struct sigaction sigs; sigs.sa_handler = signals; sigemptyset(&sigs.sa_mask); sigs.sa_flags=SA_ONESHOT; sigaction(SIGUSR1, &sigs,0); sigemptyset(&set); sigemptyset(&set2); sigaddset(&set,SIGUSR1); if(sigprocmask(SIG_BLOCK, &set, NULL)==0){ printf(“Blocking SISGUSR1…\n”); } sigpending(&set2); if (sigismember(&set2,SIGUSR1)==1) { printf(“The signal is blocked\n”); //it […]

在sigprocmask()中设置和设置

我还没有完全理解,如何使用sigprocmask() 。 特别是, set和oldset及其语法如何工作以及如何使用它们。 int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 请解释一个例子,阻止,说SIGUSR1几秒钟,然后解锁并处理它。