如何启动和终止进程(需要sudo的python脚本)

时间:2017-02-02 23:57:57

标签: python subprocess kill-process

我在我的rpi上制作gpio脚本,我想要一个核心程序来运行并杀死另一个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但不会关闭液晶显示屏...... 我需要杀死的过程是5031:

    volumio@volumio:~$ 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 个答案:

答案 0 :(得分:0)

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

一切都工作得很好,没关系:)。