2017-02-02 26 views
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"を実行する理由とこれを修正する方法を理解しています。助けてください?

+1

理由だけspawnProcess.pidを殺しませんか?あなたが殺したいプロセスIDですか?シェルをTrueに設定しているので、/ bin/shを持っていると思います。 – Shiping

+0

os.getpgid(spawnProcess.pid)とspawnProcess.pidは同じ結果を返します。シェルを設定しないと、スクリプトは起動せず、スクリプトを停止するためにx + 1プロセスを終了したい。それを行う適切な方法はありますか? – WorkInProgress

+0

spawnProcess.kill()についてはどうですか? – Shiping

答えて

0
spawnProcess = subprocess.Popen(['python', 'jukebox_lcd.py'], preexec_fn=os.setsid) 

すべては用事正常に動作している:)

関連する問題