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

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

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

答案1

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

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

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

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

答案2

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

简单来说:

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

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

答案3

sudo 服务 --status-all

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

相关内容