SIGPIPE的原因

时间:2009-12-30 21:15:55

标签: unix

我有一个在Linux上运行的应用程序,捕获信号并将它们报告给syslog。

此应用程序经常报告没有明显原因的SIGPIPE事件

应用程序在后台运行,作为守护程序。信号在空闲时发生,没有明显的网络/插座连接。应用程序经常读取和写入磁盘和DVB卡(通过内核DVB驱动程序)。

我想找出SIGPIPE的原因。用于跟踪信号源的任何方法?

编辑: 我已将此添加到代码中:

 stdin  = freopen("/dev/null", "r", stdin);
 stdout = freopen("/tmp/vdr_stdout", "w", stdout);
 stderr = freopen("/tmp/vdr_stderr", "w", stderr);

仍然获得SIGPIPE。

2 个答案:

答案 0 :(得分:4)

在符合POSIX标准的平台上,SIGPIPE是在尝试写入管道而没有连接到另一端的进程时发送给进程的信号。

由于您指的是daemon上下文,可能会关闭STD *并尝试读取/写入这些内容......调试/进度报告printf可能吗?< / p>

答案 1 :(得分:1)

您的守护程序是否关闭输入和输出?:

fclose (stdin);
fclose (stdout);
fclose (stderr);