Tag: 信号

POSIX线程和信号

我一直在试图理解POSIX线程和POSIX信号如何交互的复杂性。 我特别感兴趣的是: 控制信号传递到哪个线程的最好方法是什么(假设它首先不是致命的)? 告诉另一个线程(实际上可能很忙)信号已经到达的最好方法是什么? (我已经知道从信号处理程序中使用pthread条件variables是一个坏主意。) 我怎么能安全地处理一个信号发生的信息传递给其他线程? 这是否需要在信号处理程序中发生? (我一般不想杀死其他线程,我需要一个更微妙的方法。) 有关为什么我想要这个参考,我正在研究如何转换TclX包以支持线程,或分裂它,至less使一些有用的部分支持线程。 信号是特别感兴趣的部分之一。

如何捕获Control + D信号?

我想在我的程序中捕获Ctrl + D信号,并为它写一个信号处理程序。 我怎样才能做到这一点? 我正在C和使用Linux系统。

我可以发送一个ctrl-C(SIGINT)到Windows上的应用程序吗?

我有(过去)编写的跨平台(Windows / Unix)应用程序,从命令行启动时,以相同的方式处理用户键入的Ctrl – C组合(即干净地终止应用程序)。 是否有可能在Windows上发送一个Ctrl – C / SIGINT /等同于另一个(不相关的)进程的进程来请求它干净地终止(给它一个整理资源的机会等)?

sigaction和signal有什么区别?

我正要为我们在这里的应用程序添加一个额外的信号处理程序,并且我注意到作者使用了sigaction来设置其他信号处理程序。 我打算使用信号。 遵循约定,我应该使用sigaction,但是如果我是从头开始写的,应该select哪一个?

谁“杀了”我的过程,为什么?

我的应用程序在Linux上作为后台进程运行。 它目前在terminal窗口的命令行中启动。 最近一个用户正在执行该应用程序一段时间,它神秘地死了。 文本: 杀害 在terminal上。 这发生了两次。 我问是否有人在不同的terminal使用kill命令来终止进程? 没有。 在什么情况下,Linux会决定杀死我的进程? 我相信shell会显示“Killed”,因为进程在收到kill(9)信号后死亡。 如果Linux发送kill信号,应该在某个系统日志中有一条消息解释为什么它被杀死了?

如何防止SIGPIPE(或正确处理)

我有一个小型的服务器程序,它接受TCP或本地UNIX套接字上的连接,读取一个简单的命令,并根据命令发送一个回复。 问题是客户端有时候可能对这个答案没有兴趣,并且会提前退出,所以写入这个套接字将导致一个SIGPIPE,并使我的服务器崩溃。 最好的做法是防止这里的崩溃? 有没有办法检查线路的另一边是否仍在读取? (select()在这里似乎没有工作,因为它总是说套接字是可写的)。 还是应该用一个处理程序来捕获SIGPIPE并忽略它?

如何在Python中捕获SIGINT?

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

如何避免在信号处理程序中使用printf?

由于printf不是可重入的,因此在信号处理程序中使用它不是安全的。 但是我已经看到很多使用printf的示例代码。 所以我的问题是:什么时候我们需要避免在信号处理程序中使用printf ,是否有推荐的replace?