【发布时间】:2013-03-10 13:52:41
【问题描述】:
如果有人要追求在 Linux 中编写内核模块的疯狂而危险的想法......
- 在内核内部进程表中查找PID指定的进程
- 从表中提取内存中进程的开始/结束地址
- 用 0 覆盖此进程的所有内存
然后...
- 这是一种立即终止任何进程的方法吗?
- 这有多“不安全”?是否有可能完全不引起内核恐慌?
【问题讨论】:
-
您会完全破坏进程(破坏其堆/堆栈/其他段),但由于您不会影响进程表(或 task_struct 等),因此内核不会不要认为它“已终止”。
-
这将导致进程下次运行时出现 SIGILL(很可能)。而更简单的方法就是发送信号。
-
也就是说,你为什么要问这个问题?这是“您面临的实际问题”吗?如果你想终止一个进程,为什么不直接发送
SIGKILL? -
@Vimo:你能举个例子说明
SIGKILL不起作用吗?此外,如果这是您的实际问题,那么您可能应该围绕问题而不是可能的解决方案来提出问题。 (见What is the XY problem?) -
如果进程挂在系统调用 (stackoverflow.com/questions/8600430/…) 中,则 SIGKILL 不起作用。但在这种情况下,你的“解决方案”也行不通。