stillStudent Asked: 2012-05-08 23:21:10 +0800 CST2012-05-08 23:21:10 +0800 CST 2012-05-08 23:21:10 +0800 CST 进程的PID历史 772 我想知道的是在最后2-3 次重新启动之前分配给进程的PID。 场景是在这个特定进程崩溃后,生成一个日志文件,并将进程的 PID 连接到日志文件的名称。我有 5 个名为hs_err_PIDs的日志文件。我想确认这些 PID 是否分配给了我所关心的进程,因为我对此有点困惑。 有什么办法可以做到吗? linux process pid 4 个回答 Voted Best Answer Khaled 2012-05-08T23:29:18+08:002012-05-08T23:29:18+08:00 /var/log/messages您可以在系统日志文件中找到此信息/var/log/syslog。某些进程在启动时将消息打印到系统日志中。例如,squid 打印以下内容: May 8 00:00:00 proxy squid[7274]: Squid Parent: child process 28819 started 如果您的进程记录此类信息,您可以知道旧的 PID,如7274。 另一种可能性是您的进程在终止时导致诸如段错误之类的错误。你会发现这样的日志: May 8 00:00:00 proxy kernel: [1075746.767514] squid[24442]: segfault at 20 ip 00000000005bae26 sp 00007fff144918e0 error 4 in squid[400000+264000] 您还可以在这样的日志记录24442中找到 PID 。 对于将来的情况,如果您有兴趣稍后查找,则需要记录此类信息。 user9517 2012-05-08T23:27:08+08:002012-05-08T23:27:08+08:00 除非应用程序将其 PID 写入日志文件,否则您无法追溯获取此信息。今后您可以编写一个包装脚本来启动您的应用程序并将 PID 记录到一个文件中,或者您可以启用记帐。 一个简单的包装器可能是 yourcommand & echo $! >>/path/to/pid_history.log Sven 2012-05-08T23:26:50+08:002012-05-08T23:26:50+08:00 如果某处没有日志条目(由程序本身或它的启动脚本创建),则无法获取此信息,因为没有此信息的标准日志记录。 7Upers 2017-02-03T05:09:24+08:002017-02-03T05:09:24+08:00 # 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 文件中,以便在服务器启动后立即开始记录。
/var/log/messages
您可以在系统日志文件中找到此信息/var/log/syslog
。某些进程在启动时将消息打印到系统日志中。例如,squid 打印以下内容:如果您的进程记录此类信息,您可以知道旧的 PID,如7274。
另一种可能性是您的进程在终止时导致诸如段错误之类的错误。你会发现这样的日志:
您还可以在这样的日志记录24442中找到 PID 。
对于将来的情况,如果您有兴趣稍后查找,则需要记录此类信息。
除非应用程序将其 PID 写入日志文件,否则您无法追溯获取此信息。今后您可以编写一个包装脚本来启动您的应用程序并将 PID 记录到一个文件中,或者您可以启用记帐。
一个简单的包装器可能是
如果某处没有日志条目(由程序本身或它的启动脚本创建),则无法获取此信息,因为没有此信息的标准日志记录。
此构造在每秒 10 分钟内将进程列表的差异收集到文件 /tmp/plog 中。记录结束后,它会从控制台向您发送信号。
您可以将其添加到 rc.local 文件中,以便在服务器启动后立即开始记录。