我有 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$
事实上,我更喜欢前缀和消息。如何获得?为什么会这样呢?
答案1
在您的示例中,该kill
命令是 shell 内部命令(绝对在 中bash
),并且它允许扩展,例如%1
用于引用后台进程。
另一方面,/bin/kill
它是一个外部命令,没有这些扩展。因为它是一个不同的程序,所以它的行为也不同。失败/bin/kill
可能是静默的,但设置$?
(退出代码)来指示失败。
当你跑步时,sudo kill
你就在隐式地跑步sudo /bin/kill
。