我想pkill -9 -f 'java.*7104'
在 python3 中运行命令subprocess.run
,但我不知道为什么returncode=-9
,有人可以解释一下吗?
>>> subprocess.run("pkill -9 -f 'java.*7104'", shell=True)
CompletedProcess(args="pkill -9 -f 'java.*7104'", returncode=-9)
当我在 bash shell 中运行相同的命令时,返回代码为 0:
$ pkill -9 -f 'java.*7104'
$ echo $?
0
在 bash shell 中运行命令:
root@w-test01:/home/renyuntao# ps -ef | grep -E 'java.*7104' | grep -v grep
root 127147 1 99 11:37 pts/1 00:00:13 java -Djava.security.egd=file:/dev/./urandom -Xmx10240m -jar ./aichemy.jar --server.port=7104 --spring.profiles.active=test01_use
root@w-test01:/home/renyuntao# pkill -9 -f 'java.*7104'
root@w-test01:/home/renyuntao# echo $?
0
运行命令使用subprocess.run
:
root@w-test01:/home/renyuntao# ps -ef | grep -E 'java.*7104' | grep -v grep
root 128644 1 99 11:38 pts/1 00:00:22 java -Djava.security.egd=file:/dev/./urandom -Xmx10240m -jar ./aichemy.jar --server.port=7104 --spring.profiles.active=test01_use
root@w-test01:/home/renyuntao# python3
Python 3.5.2 (default, Apr 16 2020, 17:47:17)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.run("pkill -9 -f 'java.*7104'", shell=True)
CompletedProcess(args="pkill -9 -f 'java.*7104'", returncode=-9)
答案1
约瑟夫西布尔-恢复莫妮卡回答问题这里:
当您使用
subprocess.run
with 时shell=True
,Python 会启动一个 shell 进程,然后启动您的进程。这意味着它执行sh -c "pkill -9 -f 'java.*7104'"
。该pkill
进程只有特殊保护才能避免匹配自身,而不能避免匹配其父进程。您需要调整正则表达式以不匹配自身。在^
前面加上java
可能是最简单的方法,如下所示:subprocess.run("pkill -9 -f '^java.*7104'", shell=True)