问题标签 [signals]

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 投票
4 回答
395 浏览

perl - 有没有办法在 Perl 中托管进程(即实际工作的线程替换)?

我在 perl 中有一个多线程应用程序,我必须依赖几个非线程安全模块,所以我一直使用fork()带有信号的 ed 进程kill()作为消息传递接口。

问题是信号处理程序有点不稳定(至少可以这么说),并且通常最终会导致进程在不适当的状态下被杀死。

有一个更好的方法吗?

0 投票
5 回答
12086 浏览

c++ - 如何在命令行界面中处理 ctrl-break 信号

在开始之前,我想澄清这不是一个命令行工具,而是一个通过它自己的命令行界面接受命令的应用程序。

编辑:我必须为我之前的解释道歉,显然我没有很好地解释它。再一次...

我正在构建一个接受用户命令的命令行界面应用程序。我有一个信号处理程序设置来捕获信号,然后设置一个我需要终止应用程序的标志。我遇到的问题是我能找到的所有控制台功能都是阻塞的,这意味着我无法检测到我需要退出控制台处理循环,直到用户按下一个键(或输入,取决于功能)。

有没有一些标准的方式我可以进行非阻塞控制台交互,或者有一种优雅的方式来构建程序,这样如果我只是从信号线程终止,一切都会被正确处理和释放(请不要错过-了解这一点,我知道如何使用锁定和释放信号线程中的资源来完成,但这可能会变得混乱,所以我宁愿避免它)

希望这个解释更有意义......

0 投票
3 回答
539 浏览

linux - 使用 Gambas 处理 Linux 信号

当特定文件已更改时,我想从 bash 脚本向 Gambas 程序发送一个(尚未确定的)信号。

我怎样才能让我的 Gambas 程序处理这个信号?

0 投票
9 回答
66732 浏览

c - sigaction 和 signal 有什么区别?

我正准备向我们这里的应用程序添加一个额外的信号处理程序,我注意到作者曾经sigaction()设置过其他信号处理程序。我打算用signal(). 为了遵循约定,我应该使用sigaction(),但如果我从头开始编写,我应该选择哪个?

0 投票
2 回答
2673 浏览

perl - 如何在 Perl 中捕获和处理信号?

有什么方法可以捕获错误并从 Perl 中优雅地退出?我正在处理一个脚本,该脚本可能由于来自操作系统或我服务器上运行的其他应用程序的 SIG 事件而失败。我希望在关闭脚本执行期间打开的所有文件和其他属性后捕获此事件,显示错误并退出。

0 投票
4 回答
487 浏览

perl - 如何防止 Windows 捕获我的 Perl 异常?

我有这个应该 24/7 运行的 Perl 软件。它保持与 IMAP 服务器的连接打开,检查新邮件,然后对新邮件进行分类。

现在我有一个用户每隔一段时间就会让他的 XP 笔记本电脑休眠。发生这种情况时,与服务器的连接失败并触发异常。调用代码通常会捕获该异常并尝试重新连接。但在这种情况下,似乎 Windows(或 Perl?)正在捕获异常并通过消息框将其传递给用户。

任何人都知道我可以如何防止这种wtf?我的代码可以捕捉到“系统即将休眠”的信号吗?

为了澄清您已经提出的一些观点:

  • 我对用户休眠他们的机器没有任何问题。我只需要找到一种方法来处理它。
  • 有问题的 Perl 模块确实会引发异常。它执行类似“die 'foo bar' 的操作。尽管应用程序完全基于浏览器并且不使用 Wx 或 Tk 之类的任何东西,但用户会收到一个标题为“poll_timer”的消息框。该消息框的内容正是其内容$@ (本例中为“foo bar”)。
  • 该应用程序使用perlapp编译成可执行文件。但是,该文档没有提及有关异常处理的任何内容。
0 投票
7 回答
25742 浏览

c - 不使用 popen() 或 system() 按名称查找进程的 PID

我有一个进程名称,我必须kill()向该进程发送一个信号,但我需要它的 PID 来调用kill(). 我只想使用:

作为最后一件事。有没有其他方法可以找出进程的PID?我能想到的一种方法是向该进程发送一个套接字请求并询问它的 PID。

另一种方法对于我正在编写的简单代码来说有点太复杂了:做pidof 命令的源代码实际上正在做的事情(它使用函数调用find_pid_by_name(),但它做了很多事情)。

如果没有简单的解决方案,我必须这样做:

并检查其返回码。但是 pkill 在所有 Linux 机器上都可以使用吗?

0 投票
34 回答
408054 浏览

linux - 向进程组的所有成员发送信号的最佳方式是什么?

我想杀死整个进程树。使用任何常见的脚本语言来做到这一点的最佳方法是什么?我正在寻找一个简单的解决方案。

0 投票
4 回答
1388 浏览

gtk - 信号从 gtkmm 弹出列表中触发两次

自从我使用 GTK+ 以来已经有一段时间了,最​​后一次是在 C 中,而不是像现在这样使用 gtkmm 和 C++。无论如何,我有一个我认为应该很容易解决的问题:

我有一个由单选按钮列表组成的弹出菜单,当我单击其中一个时,我希望执行一些操作。代码如下:

我看到的唯一问题是,MyClass::on_item_activated当从菜单中选择以前未选择的单选按钮时,它会被调用两次。单击已选择的单选按钮时仅调用一次。

我猜第一次触发是说“不再激活某些东西”,第二次触发是为了激活新的单选按钮。不管我是对是错,问题都是一样的:我怎样才能让我的处理程序每​​次点击只采取一次行动?要么我需要只调用一次处理程序,要么我需要从它内部检查一些东西以了解回调是否是“重复的”。

0 投票
8 回答
4817 浏览

signals - 我可以忽略除以零导致的 SIGFPE 吗?

我有一个程序故意执行除以零(并将结果存储在 volatile 变量中)以便在某些情况下停止。但是,我希望能够禁用这种暂停,而无需更改执行除以零的宏。

有没有办法忽略它?

我试过使用

但它仍然因消息“浮点异常(核心转储)”而死。

我实际上并没有使用该值,所以我并不真正关心分配给变量的内容;0、随机、未定义...

编辑:我知道这不是最便携的,但它适用于在许多不同操作系统上运行的嵌入式设备。默认停止动作是除以零;其他平台需要不同的技巧来强制看门狗引起的重启(例如禁用中断的无限循环)。对于 PC (linux) 测试环境,我想禁用除以零时的暂停,而不依赖于断言之类的东西。