进程的PID历史logging

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

场景是在这个特定的进程崩溃之后,生成一个日志文件并且进程的PID连接到日志文件的名字 。 我有这样的5个日志文件名称为hs_err_PIDs 。 我想确认这些PID是否被分配到了我所关心的过程中,因为我对此有点困惑。

有什么办法可以做到吗?

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

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

如果你的进程logging了这样的信息,你可以知道7274这样的旧PID。

另一种可能性是,当你的过程导致一个类似段错误的错误,当它死亡。 你会发现这样的日志:

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

您也可以在这样的日志logging24442中findPID。

对于未来的情况,如果您有兴趣稍后查找,则需要logging此类信息。

除非应用程序将它的PID写入日志文件,否则无法追溯到此信息。 outlook未来,您可以编写一个包装脚本来启动您的应用程序,并将PIDlogging到一个文件中,或者您可以启用记帐。

一个简单的包装可能是

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

如果没有任何日志条目(由程序本身或它的启动脚本),没有办法得到这个信息,因为没有这个信息的标准日志logging。

 # 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中。 logging结束后,它会从控制台发送一个信号。

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