Questions tagged «signals»

信号是对事件已发生的进程的通知。信号有时被描述为软件中断。信号类似于硬件中断,因为它们会中断程序的正常执行流程。在大多数情况下,无法准确预测信号何时到达。它们在C标准中定义并在POSIX中进行了扩展,但是许多其他编程语言/系统也提供对它们的访问。

14
是什么杀死了我的程序,为什么?
我的应用程序在Linux上作为后台进程运行。当前在“终端”窗口的命令行中启动。 最近,一个用户执行该应用程序一段时间后,它神秘地死了。文本: 被杀 在航站楼上。这发生了两次。我问其他终端是否有人使用kill命令杀死进程?没有。 Linux在什么情况下会决定终止我的进程?我相信外壳程序显示为“ killed”,因为该进程在收到kill(9)信号后就死了。如果Linux发送了kill信号,那么系统日志中是否应该有一条消息说明为什么它被杀死了?
614 linux  process  kill  signals 

12
如何在Python中捕获SIGINT?
我正在研究启动多个进程和数据库连接的python脚本。我不时地想用Ctrl+ C信号杀死脚本,我想进行一些清理。 在Perl中,我可以这样做: $SIG{'INT'} = 'exit_gracefully'; sub exit_gracefully { print "Caught ^C \n"; exit (0); } 如何在Python中做类似的事情?
534 python  controls  signals 


10
如何防止SIGPIPE(或正确处理)
我有一个小型服务器程序,该程序接受TCP或本地UNIX套接字上的连接,读取一个简单命令,并根据命令发送回复。问题是客户端有时可能对答案没有兴趣,并且提早退出,因此写入该套接字将导致SIGPIPE并使服务器崩溃。防止此处崩溃的最佳实践是什么?有没有办法检查行的另一端是否仍在读取?(select()似乎在这里不起作用,因为它总是说套接字是可写的)。还是应该仅使用处理程序来捕获SIGPIPE并忽略它?
259 c  io  signals  broken-pipe  sigpipe 



9
信号和信号有什么区别?
我将要在此处的应用程序中添加一个额外的信号处理程序,并且我注意到作者曾经用来sigaction()设置其他信号处理程序。我正要使用signal()。要遵循约定,我应该使用,sigaction()但是如果我是从头开始编写的,应该选择哪个?
143 c  signals  posix 



2
Linux中具有多个线程的信号处理
在Linux中,当程序(可能具有多个线程)接收到诸如SIGTERM或SIGHUP之类的信号时会发生什么? 哪个线程拦截信号?多个线程可以得到相同的信号吗?是否有专门用于处理信号的特殊线程?如果不是,那么在处理信号的线程内部会发生什么?信号处理程序例程完成后,如何恢复执行?
119 c  linux  multithreading  signals  ipc 


4
如何在Android上的JNI下捕获SIGSEGV(分段错误)并获得堆栈跟踪?
我正在将一个项目移到新的Android Native Development Kit(即JNI)上,我想抓住SIGSEGV(如果它发生的话(可能还有SIGILL,SIGABRT,SIGFPE)),以便呈现一个不错的崩溃报告对话框,而不是(或之前)当前发生的情况:该进程立即异常死亡,并且操作系统可能会尝试重新启动它。(编辑: JVM / Dalvik VM捕获信号并记录堆栈跟踪和其他有用的信息;我只想向用户提供将这些信息通过电子邮件发送给我的选项。) 情况是:我没有编写大量的C代码,完成了该应用程序中的大部分工作(所有游戏逻辑),尽管在许多其他平台上都经过了充分的测试,但我在Android中完全有可能端口,将其作为垃圾进行处理并在本机代码中导致崩溃,因此我希望当前显示在Android日志中的崩溃转储(本机和Java)(我猜在非Android情况下将是stderr)。我可以随意修改C和Java代码,尽管回调(传入和传出JNI)的数量大约为40,显然,小差异的加分。 我听说过J2SE,libjsig.so中的信号链库,并且如果我可以在Android上安全地安装类似的信号处理程序,那将解决我的问题中的棘手部分,但是我没有看到这样的Android / Dalvik库。

16
我可以将ctrl-C(SIGINT)发送到Windows上的应用程序吗?
我已经(过去)写入了,在命令行启动时,处理用户输入的跨平台(Windows / Unix的)应用Ctrl-C以同样的方式组合(即彻底结束应用程序)。 在Windows上是否可以从另一个(不相关的)进程中向一个进程发送Ctrl- C/ SIGINT /等效项,以请求该进程完全终止(从而使它有机会整理资源等)?

7
我应该以什么顺序向正常关闭进程发送信号?
在评论对这个答案的另一个问题,该评论说: 除非绝对必要,否则不要使用kill -9!SIGKILL无法被捕获,因此被终止的程序无法运行任何关闭例程来删除临时文件。首先尝试HUP(1),然后尝试INT(2),然后尝试QUIT(3) 我原则上同意SIGKILL,但是其余对我来说就是新闻。鉴于发送的默认信号kill是SIGTERM,我希望它是正常关闭任意进程的最普遍期望的信号。另外,我还看到了SIGHUP出于非终止原因使用的原因,例如告诉守护程序“重新读取配置文件”。在我看来,SIGINT(通常与Ctrl-C相同的中断,对吗?)并没有得到应有的广泛支持,或者以不合时宜的方式终止。 鉴于这SIGKILL是万不得已的方法,您应该以哪种信号以及以什么顺序发送到任意进程,以便尽可能地正常关闭它? 如果可以的话,请用支持性的事实(超越个人喜好或意见)或参考来证实您的答案。 注意:我对包括考虑bash / Cygwin在内的最佳实践特别感兴趣。 编辑:到目前为止,似乎没有人提到INT或QUIT,并且很少提及HUP。是否有任何理由将它们包括在有序的过程中?

7
如何避免在信号处理程序中使用printf?
由于printf不是可重入的,因此在信号处理程序中使用它并不安全。但是我看过很多使用printf这种方式的示例代码。 所以我的问题是:我们什么时候需要避免printf在信号处理程序中使用,并且有推荐的替代品吗?
86 c  linux  signals 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.