如何findunix上没有日志文件的死进程的原因?

这是一个面试问题。

开发者开始了一个过程。 但是当一个客户想要使用这个过程时,他发现这个过程并没有运行。 开发人员login,发现过程中死亡。 开发者怎么知道什么是错的?

跟进:应该将日志写入文件的正在运行的进程。 但是文件中没有日志。 开发者怎样才能弄清楚在这个过程中发生了什么?

我想:如果程序可以重新运行,我将使用gdb来跟踪进程。 如果不是,请检查进程(应用程序)中的输出文件。 或者,添加打印到代码。

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

Solutions Collecting From Web of "如何findunix上没有日志文件的死进程的原因?"

如果你有磁盘空间和备用的CPU能力,你可以在程序之后留下strace来捕捉到退出的序列。

一个可能的原因,如果程序死亡而不留下任何痕迹是内存(OOM)杀手 。 这会在内核日志中留下消息,如果它杀死你的进程。

从相同的答案,可以通过告诉你退出代码和退出时间来修改进程记帐以提供一些线索。

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

core dump是一个选项。

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

所以你可以使用下面的这个脚本来启动你的软件并记录它的退出状态以找出它的退出原因。

例如:

 #!/bin/bash ./myprogram #get exit code exitvalue=$? #log exit code value to /var/log/messages logger -s "exit code of my program is " $exitvalue 

…使用像gdb一样的调试器…