如何在unix上找到没有日志文件的死进程的原因?

时间:2011-10-27 05:18:45

标签: linux unix logging process operating-system

这是一个面试问题。

开发人员开始了一个过程。 但是当客户想要使用该流程时,他发现流程没有运行。 开发人员登录后发现该进程已经死亡。开发人员怎么知道出了什么问题?

跟进:一个正在运行的进程,它应该将日志写入文件。但是文件中没有日志。开发人员如何弄清楚流程中发生了什么?

我认为: 如果程序可以重新运行,我将使用gdb来跟踪该过程。 如果没有,请检查进程(应用程序)中的输出文件。 或者,在代码中添加print。

但是,有其他方法可以通过引用操作系统生成的一些信息来实现吗?

4 个答案:

答案 0 :(得分:5)

如果您有磁盘空间和备用CPU电源,可以在程序后面留下strace以捕获导致退出的序列。

如果程序在没有任何痕迹的情况下死亡,一个可能的原因是Out-Memory!(OOM) killer。如果它终止你的进程,这将在内核日志中留下一条消息。

从同一个答案中,process accounting可以修改,通过告诉退出代码和退出时间来提供一些线索。

答案 1 :(得分:4)

  

还有其他方法可以通过引用生成的一些信息来实现   通过OS?

core dump是一种选择。

答案 2 :(得分:3)

有时程序不会创建核心转储。在这种情况下,了解软件的退出代码可能有所帮助。

因此,您可以使用以下脚本启动软件并记录其退出状态以查找退出原因。

示例:

#!/bin/bash
./myprogram

#get exit code
exitvalue=$?

#log exit code value to /var/log/messages
logger -s "exit code of my program is " $exitvalue

答案 3 :(得分:-1)

...使用像gdb这样的调试器......