Je crée des scripts gpio sur mon rpi et je veux qu'un programme de base s'exécute et tue un autre script python.Comment lancer et tuer un processus (script python nécessitant sudo)
J'ai eu quelques difficultés à trouver une explication sur la façon de procéder, mais j'ai finalement opté pour cette solution: How to terminate a python subprocess launched with shell=True. Donc, mon code est:
# // 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)
Il retournera par exemple pid: 5030 mais ne se coupera pas l'écran ... Le processus que je dois tuer est 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
Je ne Je ne comprends pas pourquoi mon sous-processus exécute "/ bin/sh -c python myscript" et comment résoudre ce problème. Toute aide s'il vous plaît?
pourquoi ne pas simplement tuer spawnProcess.pid? Est-ce l'identifiant de processus que vous vouliez tuer? Je pense que vous avez/bin/sh parce que vous avez mis shell à True. – Shiping
os.getpgid (spawnProcess.pid) et spawnProcess.pid me donnent le même résultat. Sans shell mis à True mon script n'est pas lancé et je veux tuer le processus x + 1 afin d'arrêter mon script. Y a-t-il une bonne façon de le faire? – WorkInProgress
qu'en est-il de spawnProcess.kill()? – Shiping