繁体   English   中英

如何忽略SIGKILL或强制进程进入'D'睡眠状态?

[英]How to ignore SIGKILL or force a process into 'D' sleep state?

我试图弄清楚如何让进程忽略SIGKILL。 我理解它的方式,这通常是不可能的。 我的想法是让一个进程永久进入'D'状态。 我想这样做是为了测试目的(角落的情况不是真的可重复)。 我不确定这是可能的编程(我不想破坏硬件)。 我在使用C ++和Python,但任何语言都应该没问题。 我有root权限。

我没有任何代码可以显示,因为我不知道如何开始这个,或者甚至可能。 我可以设置一个糟糕的NFS并尝试从中读取吗?

如果这是一个重复的问题,请提前道歉; 我没有发现其他人试图诱导D状态。

非常感谢。

要使进程进入“D”状态(不间断睡眠),您必须编写执行该操作的内核代码,然后通过系统调用从用户空间调用该代码。

在Linux内核中,这是通过将当前任务状态设置为不可中断并调用调度程序来完成的:

set_current_state(TASK_UNINTERRUPTIBLE);
schedule();

当然,这些操作通常包含额外的准备工作,以便任务有一种唤醒方式,例如注册一些等待队列或其他任何事情。

用于低延迟设备(如大容量存储)的设备驱动程序使用不间断睡眠来简化其逻辑。 它只应在有一个确定的方式时使用,即无论发生什么,该过程几乎都会被唤醒。

执行不间断睡眠这样的小内核的内核代码可以放入一个小模块(以最小的驱动程序框架开始),其初始化函数执行代码然后返回非零。 然后,您可以使用insmod运行代码,例如

 insmod my_uninterruptible_sleep_mod.ko

没有必要rmmod因为函数失败,所以模块立即卸载。

无法忽略SIGKILL或以任何方式处理它。

man sigaction

act指定的sa_mask字段不允许阻止SIGKILLSIGSTOP 任何这样做的尝试都会被默默地忽略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM