我有 Debian Stretch..
我认为普通用户可以以root身份杀死root进程。我以用户身份使用该命令/bin/kill 10733
。没有任何错误信息。然后,我输入了类似的命令(不带/bin/
前缀)并显示了错误消息。
这里是命令历史
deployer@deployer:~/blog$ kill 10733
-bash: kill: (10733) - Operation not permitted
deployer@deployer:~/blog$ /bin/kill 10733
deployer@deployer:~/blog$ ps aux|grep 10733
root 10733 0.0 0.6 92360 6404 ? Ss 19:19 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
deployer 10891 0.0 0.2 12732 2236 pts/0 S+ 20:10 0:00 grep 10733
deployer@deployer:~/blog$ sudo kill 10733
deployer@deployer:~/blog$ ps aux|grep 10733
deployer 10900 0.0 0.2 12732 2232 pts/0 S+ 20:10 0:00 grep 10733
deployer@deployer:~/blog$
事实上,我更喜欢前缀和消息。如何得到它?为什么会这样?
在您的示例中,该
kill
命令是一个 shell 内部(绝对是 inbash
),它允许扩展,例如%1
用于引用后台进程。另一方面,
/bin/kill
是一个外部命令,没有这些扩展。因为它是一个不同的程序,所以它的行为不同。失败/bin/kill
可能是无声的,但会设置$?
(退出代码)以指示失败。当您运行时,
sudo kill
您正在隐式运行sudo /bin/kill
。