pkillが-9を返すのはなぜですか?

pkillが-9を返すのはなぜですか?

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シェルで同じコマンドを実行すると、戻りコードは0です。

$ pkill -9 -f 'java.*7104'
$ echo $?
0

Bash シェルからコマンドを実行します。

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.runwith を使用すると、shell=TruePythonはシェルプロセスを開始し、その結果プロセスが開始されます。つまりsh -c "pkill -9 -f 'java.*7104'"、プロセスpkillは親プロセスの一致ではなく、独自の一致に対してのみ特別な保護を受けます。正規表現自体が一致しないように調整する必要があります。次のように前に^追加するのがjava最も簡単です。

subprocess.run("pkill -9 -f '^java.*7104'", shell=True)

関連情報