为什么杀死不存在的进程时操作不允许,为什么需要用 sudo 来杀死

为什么杀死不存在的进程时操作不允许,为什么需要用 sudo 来杀死

Linux 版本:CentOS 7

[weizhong@bja /tmp]
$ll apis_response_time_analysis.pid 
-rw-r--r-- 1 weizhong users 5 Jan 22 09:40 apis_response_time_analysis.pid

[weizhong@bja /tmp]
$cat apis_response_time_analysis.pid 
20795

[weizhong@bja /tmp]
$sudo ps -ef | grep 20795
weizhon+ 24876  9196  0 11:41 pts/2    00:00:00 grep --color=auto 20795

我找不到 PID,然后我尝试通过我的帐户将其杀死。但是,它说不允许操作代替没有这样的过程

[weizhong@bja /tmp]
$kill -9 20795
-bash: kill: (20795) - Operation not permitted

[weizhong@bja /tmp]
$kill -9 20795123   <--- a pid not exists
-bash: kill: (20795123) - No such process

然后我尝试用它杀死它sudo,我执行了

[weizhong@bja /tmp]
$sudo kill 20795    <-- no output

[weizhong@bja /tmp]
$sudo kill -9 20795
kill: sending signal to 20795 failed: No such process

然后我再次通过我的帐户执行

[weizhong@bja /tmp]
$kill 20795
-bash: kill: (20795) - No such process

我确定 pid 20795 是由我的账户生成的。目前我找不到 20795,但是当我杀死它时,返回Operation not permitted而不是No such process,我想知道为什么,以及为什么我的进程需要被 sudo 杀死

答案1

您不是您尝试终止的进程的所有者。这就是ps输出未列出进程 20795(参见@kamil-maciorowski 回答)以及sudo终止 20795 的要求的原因。

您可以使用ps aux列出所有进程,包括不属于您的进程。您还可以使用-p参数来显示最适合您需求的特定进程:

ps -up 20795

你会看到类似这样的内容:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
foo      20795  0.0  0.0  14728  1888 tty3     Ss+  12:03   0:00 bar

我猜想该用户将是 root(提升权限)或可能是另一个特定的系统用户。然后您需要sudo终止一个不属于您的进程。并且您成功终止了它。空的答案sudo kill 20795表明它成功了。

答案2

请注意,您仅ps -ef | grep 20795返回了grep本身 – 匹配的是命令行,而不是PID。没有PID您指定的 进程。

我猜这个数字可能不正确。它可能与其他人的线程 ID 匹配,从而sudo kill杀死了其他人的整个进程,这不是你想要的。

相关内容