这是一个面试问题。
开发人员开始了一个过程。 但是当客户想要使用该流程时,他发现流程没有运行。 开发人员登录后发现该进程已经死亡。开发人员怎么知道出了什么问题?
跟进:一个正在运行的进程,它应该将日志写入文件。但是文件中没有日志。开发人员如何弄清楚流程中发生了什么?
我认为: 如果程序可以重新运行,我将使用gdb来跟踪该过程。 如果没有,请检查进程(应用程序)中的输出文件。 或者,在代码中添加print。
但是,有其他方法可以通过引用操作系统生成的一些信息来实现吗?
答案 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这样的调试器......