我想知道的是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 文件中,以便在服务器启动后立即开始记录。