问题标签 [sigprocmask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
32367 浏览

c - sigprocmask() 中的 Set 和 Oldset

我还没有完全理解,如何使用sigprocmask(). 特别是setandoldset及其语法如何工作以及如何使用它们。

请举例说明,阻止,说 SIGUSR1 几秒钟,然后解除阻止并处理它。

0 投票
1 回答
489 浏览

linux - sigprocmask() 导致段错误

在多线程应用程序中使用 sigprocmask() 是否有任何众所周知的原因导致段错误?

我有一个使用 clone() 创建多个线程的应用程序。我已经确定,由于某种原因,当我使用 sigprocmask 时,它会出现段错误(尽管并非一直如此)。从 backtrace() 看来,当我在 siglongjmp() 之后使用 sigprocmask() 时,似乎也发生了段错误。

有任何想法吗?

0 投票
1 回答
915 浏览

linux - sigprocmask 不工作

我正在使用 sigprocmask,如下所示:

令我惊讶的是,一个打印大列表的函数以某种方式被信号中断,即使我在开头调用了 mask() 。看起来好像掩码失败了,因为我的函数没有调用任何其他函数,因此在它的运行中不会发生 unmask() 。什么会导致 sigprocmask 失败?

0 投票
2 回答
26264 浏览

c - sigprocmask() 在 UNIX 中阻塞信号

我写了一小段代码。此代码首先阻止 {SIGSEGV},然后将 SIGRTMIN 添加到同一组。所以,我的最终信号集是 {SIGSEGV,SIGRTMIN}。因此,如果我使用 SIG_UNBLOCK,根据我的理解,首先 SIGRTMIN 应该被解除阻塞,然后如果我调用 SIG_UNBLOCK,SIGSEGV 应该被解除阻塞。

也就是说,1) {SIGSEGV,SIGRTMIN} 2) SIG_UNBLOCK = unblock SIGRTMIN, 3) 再次调用 SIG_UNBLOCK = unblock SIGSEGV。我只给进程一个 SIGRTMIN,因此我的第二个解锁应该使用 SIGRTMIN 停止进程。但事实并非如此。请帮忙。 注意:请不要在 sigprocmask() 上提供其他问题的答案的链接,我已经看过它们,但它们并没有澄清我的问题。

}

0 投票
1 回答
359 浏览

linux - sigprocmask 导致主进程卡住

我有使用 sigprocmask fn 的多线程代码。众所周知,在我理解的多线程程序中未指定此调用的使用,我将删除此调用。但是,我面临的问题是,如果调用此函数,我的主线程就会卡住。我想了解为什么会发生这种情况。如果对该函数的调用被注释掉,则主线程执行良好。

在初始化期间的主程序中,创建的线程池很少。之后,我调用了调用 InitModule fn 的 TestFunction 函数。在 InitModule 中,调用 sigprocmask,然后完成其他初始化。然后该函数返回到 TestFunction。这就是卡住的地方。

用法如下

如果我从 InitModule 中删除 sigprocmask() 调用,那么我会得到“DoSomethingElse done”打印。sigprocmask 的使用如何导致线程卡住?

请注意,调用此 fn 后 InitModule 中的其余代码始终会执行。只有当我返回调用函数时,它才会卡住。

0 投票
2 回答
2323 浏览

c++ - 信号执行期间的 sigprocmask

我目前正在研究在执行关键代码段时使用sigprocmask来阻止某些信号(在这种情况下,SIGALRM和)。SIGCHLD与这些信号关联的两个信号处理程序都将访问和修改中央数据结构,因此在主进程正在处理它时防止它们访问它是至关重要的。

目前,我的计划是在代码的关键部分开始时简单地禁用这些信号,然后在结束时重新启用它们。

但是,将被阻塞的信号的信号处理程序也调用criticalFunction. 当他们调用sigprocmask函数并对自己的信号启用阻塞时会发生什么?他们会停滞不前还是继续执行?(或某些第三种条件..)

我能找到的唯一说明如下:

如果在信号处理程序中调用 sigprocmask(),则从处理程序返回可能会通过恢复原始挂起的信号掩码来撤消 sigprocmask() 的工作。(http://www.mkssoftware.com/docs/man3/sigprocmask.3.asp

(这是我上一个问题的后续问题:信号处理程序访问队列数据结构(竞争条件?)

0 投票
1 回答
8991 浏览

c - 如何在C中阻止信号?

我正在尝试创建一个程序来阻止信号 SIGUSR1 并解除对信号的阻止。在中间我想看到信号被阻止了sigpending。但是它总是说信号没有被阻塞,我可以在信号被阻塞的时候使用它。这是我拥有的代码。

有人可以帮我吗?

0 投票
1 回答
605 浏览

unix - 执行前 fork 后所有清理步骤的官方文档

在 Unix 上,我知道在调用 fork() 之后,我需要在调用 exec() 之前重置我的信号掩码并关闭我不希望孩子拥有的文件描述符。

但是,我还需要做什么?

是否有一个全面的文档列出了在分叉子进程时您可能想要清理的所有内容,以便为其提供一个很好的标准执行环境?

我目前在 Linux 上,但我想要一份包含其他 Unix 的详细信息的文档,可能还有对它们进行自动配置测试的方法。

0 投票
1 回答
309 浏览

linux - Set mask with sigprocmask works only depending where called

I have a strange behavior where manpage and google didn't help out.

In my code I want to block / unblock SIGINT when SIGUSR2 is sent. For this I install the signal handler and prepare the set for mask in a function:

Then if SIGUSR2 is sent this function is called:

For testing I called it like this:

Now the problem: The way I posted the code, sigprocmask takes no effect. But if I uncomment the two lines above, it works. So my two questions:

  1. Can you explain this behavior?
  2. What can I do to solve it? - I don't want to start with blocked signal.
0 投票
1 回答
852 浏览

c - OS X sigaction 错误地设置了 sa_mask

在 macbook (OSX 10.9.5 (13F34)) 上,以下简单程序:

神秘打印:

我希望 的sa_mask成员与给出的osa匹配。masksigprocmask

POSIX 是否为此字段指定任何要求?手册中唯一提到它的是关于不可阻塞的信号,例如SIGKILL,其中未指定该值。

在 linux 上,这个程序打印:

正如预期的那样。

gcc 版本是:

二进制文件链接到: