进程的 PID 历史记录

进程的 PID 历史记录

我想知道的是PID分配给最后一个进程之前2-3 重启

场景是,在这个特定的进程崩溃后,会生成一个日志文件,并且进程的 PID 与日志文件的名称连接我有 5 个日志文件,名称如下错误原因。我想确认这些 PID 是否分配给了我所关注的进程,因为我对此有点困惑。

有什么办法可以做到吗?

答案1

您可以在系统日志文件中找到这些信息/var/log/messages/var/log/syslog某些进程在启动时会将消息打印到系统日志中。例如,squid 会打印以下内容:

May  8 00:00:00 proxy squid[7274]: Squid Parent: child process 28819 started

如果你的进程记录了这样的信息,你就可以知道旧的 PID,例如7274

另一种可能是你的进程在终止时引发了类似段错误 (segfault) 的错误。你会发现这样的日志:

May  8 00:00:00 proxy kernel: [1075746.767514] squid[24442]: segfault at 20 ip 00000000005bae26 sp 00007fff144918e0 error 4 in squid[400000+264000]

您还可以在这样的日志记录中找到 PID24442

对于未来的案例,如果您有兴趣稍后查找,则需要记录此类信息。

答案2

除非应用程序将其 PID 写入日志文件,否则您无法追溯获取此信息。接下来,您可以编写包装器脚本来启动应用程序并将 PID 记录到文件中,或者您可以启用记帐。

一个简单的包装可能是

yourcommand &
echo $! >>/path/to/pid_history.log

答案3

如果某处没有此日志条目(无论是由程序本身还是其启动脚本创建),则无法获取此信息,因为没有此信息的标准日志记录。

答案4

# ps ax > /tmp/process.list; for i in `seq 1 600`; do echo $i >> /tmp/plog; date >> /tmp/plog; ps ax | diff /tmp/process.list - >> /tmp/plog; sleep 1; done; ping -a 127.0.0.1

此构造每隔 10 分钟将进程列表的差异收集到文件 /tmp/plog 中。记录结束后,它会从控制台向您发送信号。

您可以将其添加到 rc.local 文件中,以便在服务器启动后立即开始记录。

相关内容