在哪里可以看到内核终止进程的列表?


33

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

Answers:


30

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

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

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

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


线程杀死消息是什么样的/var/log/kern.log
蜜蜂

12

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

简单来说:

apt-get install acct

然后尝试以下命令:

lastcomm
sa

或在Ubuntu上:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

看到:

更新

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

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

更新2

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

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

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

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15

与“ E 0”相比,表示该过程没有错误退出。

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0

仅经过最低限度的测试。


-1

sudo服务-状态全部

此命令将告诉您当前正在运行哪些服务,哪些尚未启动或停止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.