问题标签 [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 投票
5 回答
18310 浏览

gtk - GTK 检测用户调整窗口大小

在 GTK(或 pygtk 或 gtkmm...)

如何检测到应用程序窗口已被用户手动调整大小,通常通过拖动窗口边缘来完成?

我需要找到一种方法来区分手动调整大小和源自 gtk 的调整大小,例如窗口内容的更改。

0 投票
1 回答
702 浏览

macos - OS X 进程控制

我正在为 leopard 编写一个进程控制器内核扩展。该应用程序使我能够使用 SIGSUS 暂停进程并使计算机进入睡眠状态。我的问题是当一个使用视频/音频的应用程序(例如 iTunes 或 GarageBand)被挂起,然后我尝试让计算机进入睡眠状态时,睡眠过程会等待音频/视频应用程序以 30 秒的超时结束。实际上,当我在音频/视频应用程序挂起时尝试​​使计算机进入睡眠状态时,计算机会挂起 30 秒(可能被挂起的应用程序没有响应睡眠请求)然后它正常睡眠。当我唤醒计算机并将 SIGCON 发送到视频/音频应用程序时,它会正常继续。

有没有办法改变 30 秒的等待时间?或者让它根本不等待?或者任何其他解决方案?

0 投票
4 回答
63435 浏览

android - 如何捕获 SIGSEGV(分段错误)并在 Android 上的 JNI 下获取堆栈跟踪?

我正在将一个项目移动到新的 Android 本机开发工具包(即 JNI),我想捕获 SIGSEGV,如果它发生(可能还有 SIGILL、SIGABRT、SIGFPE),以便呈现一个不错的崩溃报告对话框,而不是(或之前)当前发生的情况:进程立即不客气地死亡,并且操作系统可能尝试重新启动它。(编辑: JVM/Dalvik VM 捕获信号并记录堆栈跟踪和其他有用信息;我只是想为用户提供将这些信息通过电子邮件发送给我的选项。)

情况是:我没有编写的大量 C 代码在这个应用程序中完成了大部分工作(所有游戏逻辑),尽管它在许多其他平台上经过了很好的测试,但我完全有可能在我的 Android 中端口,会给它提供垃圾并导致本机代码崩溃,所以我想要当前显示在 Android 日志中的崩溃转储(本机和 Java)(我猜在非 Android 情况下它会是标准错误)。我可以随意修改 C 和 Java 代码,尽管回调(从 JNI 传入和传出)数量约为 40,显然,小差异的奖励积分。

我听说过 J2SE 中的信号链库 libjsig.so,如果我可以在 Android 上安全地安装这样的信号处理程序,那将解决我的问题的关键部分,但我看不到 Android/Dalvik 的此类库.

0 投票
3 回答
1934 浏览

perl - 在 Solaris 9 上休眠时的 SIGALRM

在 Solaris 9 (Sparc) 的 chroot 环境中运行 Perl 时,我遇到了一些奇怪的错误。我们使用的是定制的 Perl,但它几乎完全是 Perl 5.8.7,而且这个版本已经在包括 Solaris 8-10 在内的各种平台上运行了多年。

以下代码非常简单:

但是,如果我运行它,“刚醒来!” 永远不会被打印 - 相反,程序结束并且“闹钟”回显到屏幕上。只有在睡眠时才会发生这种情况——如果我编写了一个执行大量数学运算并需要 10 秒运行的程序,那么一切正常。它也只发生在 chroot 环境中。

我已经转储了 %SIG,它有一个 'ALRM => undef' 的条目,这是预期的 - 非 chroot 环境具有相同的行为。但是,如果我将脚本更改为包括:

...一切正常。那么,有什么关系呢?我对 Solaris 没有太多经验,但是必须有一种方法可以使默认信号处理程序正常运行。

0 投票
4 回答
5991 浏览

django - 有没有办法列出 Django 信号?

有没有办法查看 Django 中设置了哪些信号?

0 投票
3 回答
285 浏览

c - 收到神秘 SIGINT 的应用程序

我们有一个用 C 语言为几个不同的 UNIX 平台编写的小型守护程序应用程序(这个问题发生在 SunOS 5.10 中),它基本上只是打开一个串行端口,然后侦听通过所述端口进入的信息。

在这个特定的实例中,守护进程似乎读取了通过串行端口发送的单个传输(如文件的数据),然后它接收到一个 SIGINT。每次都会发生这种情况。其他客户非常相似地使用此设置,但未收到 SIGINT。很明显,用户没有按 Ctrl-C。我们有一个相对简单的信号处理程序,所以我们肯定知道这就是正在发生的事情。

还有什么可能导致这种情况?谷歌搜索并查看这里的问题,我找不到关于可能导致 SIGINT 的其他事情的太多解释。我还查看了代码,发现没有调用 raise() 并且只有一个调用 kill(pid, 0) 无论如何都不会发送 SIGINT。

任何想法或见解肯定会受到赞赏。

0 投票
12 回答
515896 浏览

python - 如何在 Python 中捕获 SIGINT?

我正在编写一个启动多个进程和数据库连接的 python 脚本。时不时地我想用Ctrl+C信号杀死脚本,我想做一些清理工作。

在 Perl 我会这样做:

我如何在 Python 中做类似的事情?

0 投票
1 回答
3470 浏览

c++ - glibmm 超时信号

我正在使用 gtkmm 为较小的应用程序开发插件。我正在研究的插件每分钟检查某些条件(日期已更改,新的一天开始),并在条件为真时启动一些操作。在插件的初始化部分,我有以下使用 Glib::SignalTimeout 和 sigc++ 的代码:

其中 testCounter 是在包含初始化方法的类中定义的属性,CHECK_INTERVAL 是等于 1 分钟的常数。存在的所有其他变量都在包含初始化代码和回调方法的类中定义。checkNewDay 方法是测试条件并在日期发生变化时采取的措施:

在我使用实际操作之前,我放置了上面介绍的小测试代码,以测试是否一切顺利,并且每分钟调用 checkNewDay 的次数不超过一次。我的发现让我感到困惑。每分钟过去后,我会在标准输出上打印出一些让说 10 条消息(至少),但变量每分钟只增加一次。

****** 剪断 ****

每分钟左右检查新的一天

递增前

1 分钟过去了

每分钟左右检查新的一天

递增前

1分钟过去了

****剪断****

每分钟左右检查新的一天

递增前

2 分钟过去了

每分钟左右检查新的一天

递增前

2 分钟过去了

****剪断******

它的行为就像文本被发送到 10 个(左右)不同的缓冲区并在每分钟后一次打印出来。有人可以启发我并帮助我理解为什么会发生这种情况,因为我很确定回调每分钟只调用一次。谢谢!

0 投票
3 回答
2929 浏览

python - MPI 信号处理

使用 时,是否可以在正在运行的代码中mpirun捕获信号(例如,由 生成的 SIGINT )?^C

例如,我正在运行一个并行化的 python 代码。我可以在自己except KeyboardInterrupt运行时捕获这些错误python blah.py,但在执行mpirun -np 1 python blah.py.

有人有建议吗?即使找到如何在 C 或 C++ 编译程序中捕获信号也是一个有益的开始。

如果我向生成的 Python 进程发送信号,它们可以正确处理信号;但是,发送到父orterun进程的信号(即来自集群上超过挂墙时间,或在终端中按 control-C)将立即杀死所有内容。

0 投票
1 回答
206 浏览

bluetooth - 如何以编程方式选择要推送文件的 BT 设备?

我正在设计一个信息亭,需要一个 BT 应用程序,它可以自动将文件推送到最近的支持 BT 的设备,假设这将是当前站在信息亭前面的人的电话。

除了检查 RSSI(接收信号强度指示器)之外,还有其他方法吗?

是否所有蓝牙堆栈都支持访问此属性?

作为决定推送到哪个设备的基础,RSSI 有多准确?是不是距离信息亭较远的其他电话发出的信号比站在信息亭前面的人的电话发出的信号更强?