【发布时间】:2015-10-05 17:04:51
【问题描述】:
我尝试运行以下命令kill -9 1,它显示bash: kill: (1) - Operation not permitted。
对我来说很明显,如果没有 sudo,您将无法向 init 进程发出信号。
但是在为 c-shell 编写代码时,我遇到了一个错误(我认为确实如此)。我编译了以下程序并运行它。现在它让我和我所有的操作系统概念都感到困惑。
#include <signal.h>
int main()
{
killpg(1,9);
return (0);
}
请保存所有程序并自行运行代码。
谁能给我一个理由并澄清我的困惑。
更新killpg() 的手册页读作...
在 Linux 上,killpg() 被实现为一个库函数,它使 调用 kill(-pgrp, sig)。
kill() 的手册页读作...
-1 的 PID 是特殊的;它表示除kill之外的所有进程 进程本身并初始化。
现在的问题是,这样一个字面上会杀死一切的调用有什么用。它有许多危险的应用程序,而不是有用的应用程序。但是既然这么多年一直保存在linux内核中,那么它一定有它自己的用处。但我什么都想不出来。有人知道吗?
【问题讨论】:
-
If pgrp is 0, killpg() sends the signal to the calling process's process group. (POSIX says: If pgrp is less than or equal to 1, the behavior is undefined. -
我错过了手册页上的那一行。这提醒我,在得出任何结论之前,我应该阅读手册页两次。 :)
-
您不会以 root 身份进行测试,不是吗?
-
不,绝对不是。我什至在虚拟机上运行它,它会杀死所有进程并注销当前用户。
标签: c linux system-calls