我有一个在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。
发布于 2009-12-31 05:22:58
在符合POSIX的平台上,SIGPIPE是当一个进程试图在没有连接到另一端的进程的情况下写入管道时发送给该进程的信号。
由于您引用的是daemon上下文,因此可能关闭了STD*,并尝试对其执行读/写操作。也许是一个调试/进度报告printf?
发布于 2009-12-31 05:19:37
您的守护进程是否关闭输入和输出?:
fclose (stdin);
fclose (stdout);
fclose (stderr);https://stackoverflow.com/questions/1982539
复制相似问题