gpt4 book ai didi

linux - 允许/sbin/init 被 SIGSTOP?

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:13 24 4
gpt4 key购买 nike

我知道 /sbin/init 出于显而易见的原因对来自内核的 SIGKILLSIGSTOP 进行了特殊保护。

我已经尝试通过 ioctl() 告诉内核我想接收 SIGSTOP(类似于 SIGABRTSIGSEGV main() 中的请求:

if (ioctl (0, KDSIGACCEPT, SIGSTOP) == 0) {
nih_signal_set_handler (SIGSTOP, stop_handler);

但是 SIGSTOP 没有到达 stop_handler()(据我所知,因为 nih_error() 没有打印在日志)。

stop_handler() 中,我将 SIGSTOP 信号处理程序重置为 SIG_DFL(否则它会返回到我们的处理程序) , 但这可能导致它再次被内核忽略。

如何告诉内核我想让 init 停止?

最佳答案

您需要从其任务结构的 signal_struct 标志中取出 SIGNAL_UNKILLABLE 标志。

默认情况下(即始终在未修改的 Linux 系统上)SIGNAL_UNKILLABLE 标志设置在 init 的 signal_struct 标志上。

您可以编写一个内核模块来插入 init 的任务结构来更改它,然后您就可以向 init 发送停止信号。

不过,向 init 发送停止信号是一个非常糟糕的主意,因为如果 init 不再收割它们,僵尸会迅速繁殖。


澄清:这是一个内核结构,不是 init 源代码的一部分,也不能从用户空间访问或可见。要更改它,您需要编写一些内核代码或修补内核。我想,编写一个只是破解它的内核模块是相当微不足道的。

关于linux - 允许/sbin/init 被 SIGSTOP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com