如何列出线程被内核杀死?

时间:2012-12-26 22:09:58

标签: linux shell linux-kernel

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

我看到这个answer暗示:

登记入住:

/var/log/kern.log

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

我想做什么:

列出线程/进程,如果它被杀死了。我应该编辑内核中的哪些函数来列出所有被杀死的tid / pid及其名称,或者是否仍有sysfs呢?

2 个答案:

答案 0 :(得分:2)

do_fork相反的是do_exit,此处: do_exit kernel source

我无法找到线程何时退出,而不是:

release_task

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

答案 1 :(得分:1)

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

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

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

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