应用程序接收神秘的SIGINT

时间:2009-07-06 18:47:25

标签: c unix signals signal-handling

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

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

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

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

3 个答案:

答案 0 :(得分:2)

如果您不希望串行端口成为该进程的控制终端,请使用open标志O_NOCTTY将其打开。如果是控制终端,来自串口的数据可能被解释为中断或其他特殊字符。

答案 1 :(得分:1)

您没有说明您的信号处理程序是如何附加的,但是如果您能够使用sigaction(2)附加它以便获得siginfo_t那么它看起来会包含pid发送信号(si_pid)。

答案 2 :(得分:0)

我发现了一个有趣的blog post关于调试具有类似症状的问题。虽然我怀疑它是同一个问题,但它有一些非常有用的调试技巧来跟踪信号的来源。