问题标签 [signal-handling]

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 投票
2 回答
183 浏览

c - 更新全局变量时的屏蔽信号

我知道我可以在处理程序执行时屏蔽信号(通过使用 sa_mask)。但是,我想知道在更新一些全局变量时如何屏蔽信号。

另外,我想知道在执行特定的用户定义函数时如何屏蔽信号。

有可能做这2件事吗?

任何帮助将不胜感激

谢谢

0 投票
1 回答
223 浏览

c - SIGINT 也从子进程收到

我有 2 个程序(由我编写)。第一个称为“MAN”将调用“D”(第二个),这是一个将在后台运行直到以某种方式终止的进程。

我想在不终止 D 的情况下终止 MAN。

我尝试使用 ctrl + c 终止 MAN 并且它正确终止了 man (我截获了 sigint 信号),现在我希望 D 继续运行,但是当 MAN 接收到 CTRL + C 时,D 也接收到它。

如何处理这种情况?重要的是,我想保留仅运行 D 并使用 CTRL + C 终止的可能性。当我通过 MAN 运行它时,问题就出现了,我不想用 CTRL + C 来终止它,它应该只到达 MAN。

有什么建议吗?

0 投票
2 回答
2813 浏览

c - Signal handling in OpenMP parallel program

I have a program which uses POSIX timer (timer_create()). Essentially the program sets a timer and starts performing some lengthy (potentially infinite) computation. When the timer expires and a signal handler is called, the handler prints the best result yet that has been computed and quits the program.

I consider doing the computation in parallel using OpenMP, because it should speed it up.

In pthreads, there are special functions for example for setting signal masks for my threads or so. Does OpenMP provide such control, or do I have to accept the fact that the signal can be delivered to any of the threads OpenMP creates?

Also, in case I am currently in a parallel section of my code and my handler is called, can it still safely kill the application (exit(0);) and do things like locking OpenMP locks?

0 投票
2 回答
735 浏览

c++ - 信号处理程序访问队列数据结构(竞争条件?)

我目前正在用 C++ 编写一个小 shell。

作业和与之关联的 PID 存储在作业指针队列中(job *)。运行新作业时,有关它的信息将添加到队列中。由于可以同时处理多个作业,并且可以随时在 shell 的控制台中输入新作业,因此我有一个信号处理程序来等待终止的作业。

当作业终止时,我需要从活动作业队列中删除它的信息并将其移动到我的已终止作业的双端队列中。但是,当另一个作业停止时,可能会将用户的新作业添加到队列中。

在这种情况下,他们的insert队列操作将被暂停,我的信号处理程序将被调用,它将执行它的pop操作。

我试图了解如何解决这种潜在的竞争条件,因为我认为在此过程中可能会发生损坏。我不能使用互斥锁,因为如果被中断的父进程当时正在使用队列,则会发生死锁。

我看到了一些关于C++11能够执行用户声明的原子操作的信息,以及有关 tasklet 的信息。我不确定这些是否与我的问题有关。

有趣的是,我用作参考的示例外壳(MSH - http://code.google.com/p/mini-shell-msh/)似乎没有对此类条件进行任何处理。信号处理程序与主控制台一起立即修改作业列表。也许我在这里忽略了什么?

与往常一样,所有反馈都会得到认可。

0 投票
2 回答
5571 浏览

c - 从信号处理程序返回

我没有以正确的方式离开我的信号处理函数吗?它似乎没有正常返回程序。相反,它进入循环并在应该等待用户输入的地方,它跳过并将“用户输入”的长度读取为 -1 并出错。(在代码中会更有意义。)

因此,当输入 ctrl+c 时,它应该捕获信号并处理它。一旦它返回到 main,它就会进入 setup 并完全跳过 read 函数并使长度等于 -1。这反过来又使程序出错。我认为 handle_SIGINT 中的代码与现在一样无关紧要。有谁知道为什么它会在设置中跳过读取功能?

0 投票
2 回答
4613 浏览

c - 处理多个信号

我有一个关于处理信号的问题。假设如果我们收到 SIGINT 信号,我们应该打印“Recieved Signal”。如果在十秒内处理程序收到另一个信号,它应该打印“Shutting Down”,然后以状态 1 退出。

我的代码是这样的:

我试图用 dev c++ 编译它,但它失败了。因为 SIGALRM 未声明(在此函数中首次使用)。

无论如何,我想知道的是这段代码是否正确。我实际上有点不确定 alrmhandler()。我应该忽略 SIGALRM 吗?

0 投票
4 回答
12392 浏览

perl - 各种 $SIG{CHLD} 值之间有什么区别?

这些设置有什么区别?

根据“UNIX 环境中的高级编程,第 2 版”,图 10.1 SIGCHLD 的默认值是“忽略”。

如果“忽略”意味着“SIG_IGN”,那么任何孩子都不会成为僵尸,而事实并非如此。

从那里并没有变得更清楚:

如果进程专门将其处置设置为 SIG_IGN,则调用进程的子进程将不会生成僵尸进程。请注意,这与其默认操作 (SIG_DFL) 不同,图 10.1 中的默认操作将被忽略。相反,在终止时,这些子进程的状态将被丢弃。

我很难理解各种值(或未定义的非值)的影响是什么。到目前为止,解决方案一直是在这些选择之间进行轮换,直到获得所需的行为,我宁愿准确了解每个值如何定义信号的行为。

行为:子进程正在调用“系统”或使用创建另一个子进程的反引号,并且信号通常会被错误的(父)处理程序捕获。设置本地处理程序可以工作,但如果我希望来自孙子的信号什么都不做,我不明白哪个值最合适。

有人可以照亮我吗?

更新: 根据 ikegami 的反馈,我做了一些具体的测试。该行为至少部分是特定于平台的。

考虑以下片段:

Solaris 10 上的 Perl 5.8.6 将为 system() 调用的 PID 显示“SIGNAL CHLD”消息。做任何事,哪怕是微不足道的事

本地 $SIG{CHLD};

在孩子会压制那些消息。

在我尝试过的所有其他口味中,收割者从未见过孩子。

0 投票
2 回答
28356 浏览

python - python:相当于SIGALRM的windows

我有这个装饰器:

该代码仅在 linux 上执行任何操作,但与在 windows 上一样,没有SIGALRM. 让这段代码在 Windows 中也能工作的最简单方法是什么?

0 投票
4 回答
3248 浏览

c - 在信号处理程序中读取共享数据

我处于需要读取信号处理程序(SIGSEGV信号处理程序,据我所知是每个线程库)内的二叉搜索树(BST)的情况。BST 可以被应用程序中的其他线程修改。

现在,由于信号处理程序不能使用信号量、互斥锁等,因此无法访问共享数据,我该如何解决这个问题?请注意,我的应用程序是多线程的,并且在多核系统上运行。

0 投票
2 回答
4112 浏览

c - 什么构成异步安全

据说您应该只在信号处理程序中调用异步安全函数。我的问题是,什么构成异步安全?我猜一个既可重入线程安全的函数是异步安全的?或者没有?