1
私はrpiでgpioスクリプトを作成しています。コアプログラムを実行して別のPythonスクリプトを強制終了します。プロセスを起動して終了する方法(sudoが必要なpythonスクリプト)
私はこれを行う方法について説明するのにいくつか問題がありましたが、最終的にこの解決策に向かった:How to terminate a python subprocess launched with shell=True。だから私のコードは次のとおりです。
# // on button pressed, turn on the lcd
spawnProcess = subprocess.Popen("python jukebox_lcd.py", shell=True, preexec_fn=os.setsid)
print "pid : ", os.getpgid(spawnProcess.pid)
# // off button pressed, turn off the lcd
os.killpg(os.getpgid(spawnProcess.pid), signal.SIGTERM)
それは、例えば、PIDのために返されます:5030が、LCDの電源をオフにしないだろう...私は殺すために必要 プロセスは5031である:
[email protected]:~$ ps -elf | grep python
4 S root 4991 2760 0 80 0 - 1307 - 23:11 pts/0 00:00:00 sudo python jukebox-buttons.py
4 S root 4995 4991 3 80 0 - 8352 - 23:11 pts/0 00:00:00 python jukebox-buttons.py
0 S root 5030 4995 0 80 0 - 456 - 23:11 ? 00:00:00 /bin/sh -c python /home/FTP/jukebox_lcd.py
0 S root 5031 5030 1 80 0 - 2062 - 23:11 ? 00:00:00 python /home/FTP/jukebox_lcd.py
0 S volumio 5035 3952 0 80 0 - 648 pipe_w 23:11 pts/1 00:00:00 grep python
私は「ドン私のサブプロセスが "/ bin/sh -c python myscript"を実行する理由とこれを修正する方法を理解しています。助けてください?
理由だけspawnProcess.pidを殺しませんか?あなたが殺したいプロセスIDですか?シェルをTrueに設定しているので、/ bin/shを持っていると思います。 – Shiping
os.getpgid(spawnProcess.pid)とspawnProcess.pidは同じ結果を返します。シェルを設定しないと、スクリプトは起動せず、スクリプトを停止するためにx + 1プロセスを終了したい。それを行う適切な方法はありますか? – WorkInProgress
spawnProcess.kill()についてはどうですか? – Shiping