我们必须用C语言编写的一对夫妇的各种UNIX平台(这个问题是在SunOS 5.10发生的)一个小型的守护进程应用程序,基本上只是打开了一个串行端口,然后侦听信息通过进来说端口。

在该特定情况下,该守护进程出现读取单个传输(如数据的文件的价值)通过串行端口发送过来,然后将其接收信号情报。出现这种情况每次。其他客户使用此设置非常相似,而不会收到SIGINT。很显然,用户没有按Ctrl-C。我们已经制定了相对简单的信号处理程序,所以我们肯定知道,这是发生了什么。

否则怎么可能会导致这?谷歌搜索周围,并通过提问这里寻找,我找不到太多解释,可能导致一个SIGINT其他的事情。我也通过代码看了一下,发现没有呼吁提高(),只有一个调用杀死(PID,0),这将不会继续发送一个SIGINT。

任何想法或洞察铁定可以理解。

有帮助吗?

解决方案

如果你不想串口成为进程的控制终端,使用的 open 标志O_NOCTTY。如果它是控制终端,从串行端口数据可被解释为中断或其他特殊字符。

其他提示

您没有说你的信号处理程序如何连接,但如果你能使用它的 sigaction的(2)以便得到一个siginfo_t那么它看起来像将包括发送该信号(si_pid)的PID。

我发现一个有趣的博客帖子。虽然我怀疑这是同一个问题,它有一些非常有用的调试技巧跟踪信号来源。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top