我试图找到一个用c编写的linux守护进程中的错误。守护进程应该在一个无尽的循环中运行,回答请求。偶尔它会莫名其妙地停止。没有创建coredump。没有kernel-segfault消息被写入/var/log/messages
我们已经知道进程的死亡是由某些请求引起的,但是我无法在源代码中找到错误发生的位置。
到目前为止我所做的是:
- 用-g -Wall重新编译,从ulimit开始-c unlimited
- 用-ABRT杀死,这将创建一个coredump,所以权限必须是ok的
- 添加char *p=NULL, c=*p;代码的某处。这将创建一个coredump和一个kern.info segfault syslog-message。gdb .out内核显示了一个完美的回溯
这一切都让我相信,问题不是由错误的指针引起的。每个exit()语句之前都有syslog()语句,因此进程不会自行停止。这个系统上没有任何用户可能会终止这个进程。
如果没有coredump,还有什么可以杀死unix进程?
彼得某些信号的默认处理程序。
如果这是一个守护进程,它可能处理一些网络通信。默认情况下,套接字操作可能引发SIG_PIPE信号。默认处理程序只是退出程序。
确保忽略SIG_PIPE