pourquoi l'opération n'est pas autorisée lorsque tuer un processus inexistant et pourquoi il faut tuer avec sudo

0

Version 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

Je ne trouve pas le PID, puis j'ai essayé de le tuer avec mon compte. Cependant, il a déclaré que l’ opération n’était pas autorisée au lieu de celle-ci.

[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

alors j'ai essayé de le tuer avec sudo, j'ai exécuté

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

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

Puis j'ai exécuté à nouveau par mon compte

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

Je suis sûr que le pid 20795 est généré par mon compte. Actuellement, je ne trouve pas 20795, mais quand je le tue, retourne Operation not permittedau lieu de No such process, je veux savoir pourquoi et pourquoi mon processus doit être tué par sudo

WeizhongTu
la source
Dans Ubuntu ps -efdonne la même liste indépendamment de sudo. Il semble que le PID 20795 était libre au moment où vous avez exécuté l'opération grep, mais a ensuite été affecté à un autre processus. Ou cela aurait pu être un ID de thread, mais je ne sais pas ce qui se killpasse avec les TID.
AFH

Réponses:

1

Vous n'êtes pas le propriétaire du processus que vous essayez de tuer. C'est la raison à la fois du psrésultat - qui n'a pas répertorié le processus 20795 (voir la réponse @ kamil-maciorowski) - et de l' sudoobligation de tuer 20795.

Vous pouvez utiliser ps auxpour répertorier tous les processus, y compris ceux que vous ne possédez pas. Vous pouvez également utiliser un -pargument pour indiquer un processus spécifique qui correspond le mieux à vos besoins:

ps -up 20795

Vous verrez quelque chose comme ça:

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

Je suppose que cet utilisateur sera root (privilèges élevés) ou peut-être un autre utilisateur système spécifique. Vous devez ensuite sudoarrêter un processus que vous ne possédez pas. Et tu réussis à le tuer. La réponse vide pour sudo kill 20795dit cela a fonctionné.

A. Loiseau
la source
1

Notez que vous avez ps -ef | grep 20795renvoyé le grepmessage lui - même uniquement - la correspondance était avec la ligne de commande, pas le PID. Il n'y avait pas de processus avec le PIDspécifié.

Je suppose que le nombre peut avoir été incorrect. Cela correspond probablement à l'identifiant de thread de quelqu'un d'autre et cette manière a sudo killtué le processus complet de quelqu'un d'autre, ce qui n'était pas ce que vous vouliez.

Kamil Maciorowski
la source