我想知道的是在最后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。