1

有没有办法列出linux设备中所有被杀死的进程?

我看到这个答案暗示:

报到:

/var/log/kern.log

但它不是通用的。还有其他方法吗?

我想做的事:

列出线程/进程是否被杀死。我应该编辑内核中的什么函数来列出所有被杀死的 tid/pid 及其名称,或者无论如何是否有sysfs它?

4

2 回答 2

2

与之相反的do_forkdo_exit,这里: do_exit kernel source

我无法找到线程何时退出,除了:

发布任务

我相信“任务”和“线程”在 Linux 中(几乎)是同义词。

于 2012-12-26T23:20:46.487 回答
1

首先,内核中的任务和线程上下文是不同的。任务(使用 tasklet api)在软件中断上下文中运行(意味着您在任务 ctx 中时不能睡眠),而线程(使用 kthread api 或 workqueue api)在进程 ctx 中运行处理程序(即可以睡眠的 ctx)。

在这两种情况下,如果一个线程在 kerenl 中挂起,您就无法杀死它。如果你从 shell 运行“ps”命令,你可以在那里看到它(通常带有“[”和“]”大括号),但任何试图杀死它的尝试都行不通。

内核是受信任的代码,这种情况不应该发生,如果发生,则表明存在内核(或内核模块)错误。

通常整台机器会在一段时间后运行,因为运行该线程的核心没有响应(您将在 /var/log/messages 或控制台中看到一条消息,其中包含更多信息)在某些其他情况下,机器可能会存活但特定的核心死了。取决于内核配置。

于 2012-12-28T01:59:50.807 回答