我在哪里可以看到内核杀死的进程列表?

Kit*_*nde 34 linux process logs kill monitoring

有什么方法可以检查内核杀死了我的哪些进程?有时我登录到我的服务器,发现应该运行一整夜的东西在 8 小时后停止了,我不确定是应用程序在做还是内核在做。

Gil*_*il' 30

如果内核杀死了一个进程(因为系统内存不足),就会有内核日志消息。签入/var/log/kern.log(在 Debian/Ubuntu 上,其他发行版可能会将内核日志发送到不同的文件,但通常/var/log在 Linux 下)。

请注意,如果触发了 OOM-killer(内存不足杀手),则表示您没有足够的虚拟内存。添加更多交换(或可能更多 RAM)。

一些进程崩溃也记录在内核日志中(例如分段错误)。

如果进程是从 cron 启动的,您应该收到一封包含错误消息的邮件。如果进程是从终端中的 shell 启动的,请检查该终端中的错误。运行该进程screen以在早上再次查看终端。如果 OOM-killer 触发,这可能无济于事,因为它也可能杀死了 cron 或 screen 进程;但是如果你遇到了 OOM 杀手,那就是你需要解决的问题。


Mik*_*kel 12

流程会计可以在这里提供帮助。

简单来说:

apt-get install acct
Run Code Online (Sandbox Code Playgroud)

然后尝试以下命令:

lastcomm
sa
Run Code Online (Sandbox Code Playgroud)

或在 Ubuntu 上:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct
Run Code Online (Sandbox Code Playgroud)

看:

更新

奇怪的是,该pacct文件有关于退出状态的信息,但似乎既没有lastcommsa没有打印出来。

因此,据我所知,您必须编写自己的 C 程序才能访问这些信息。

更新 2

这是一个打印退出代码的版本。

最后两个字段是“S”表示已发出信号,“E”表示退出,后跟信号编号或退出状态。

因此,在您的情况下,您可能正在寻找“S 15”,这意味着它有一个 SIGTERM。

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15
Run Code Online (Sandbox Code Playgroud)

与“E 0”相比,这意味着进程退出没有错误。

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0
Run Code Online (Sandbox Code Playgroud)

只进行了最低限度的测试。