3

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

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

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

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

4

3 回答 3

2

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

于 2009-07-06T20:07:19.693 回答
1

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

于 2009-07-06T19:42:00.057 回答
0

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

于 2009-07-06T19:40:22.650 回答