我有一个在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。
答案 0 :(得分:4)
在符合POSIX标准的平台上,SIGPIPE是在尝试写入管道而没有连接到另一端的进程时发送给进程的信号。
由于您指的是daemon
上下文,可能会关闭STD *并尝试读取/写入这些内容......调试/进度报告printf
可能吗?< / p>
答案 1 :(得分:1)
您的守护程序是否关闭输入和输出?:
fclose (stdin);
fclose (stdout);
fclose (stderr);