当前位置: 首页 > 知识库问答 >
问题:

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

柴岳
2023-03-14

我正在我的rpi上制作gpio脚本,我想要一个核心程序来运行并杀死另一个python脚本。

我很难找到关于如何执行此操作的解释,但最终选择了此解决方案:如何终止使用shell=True启动的python子进程。所以我的代码是:

# // 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:

    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个答案

隆飞宇
2023-03-14
spawnProcess = subprocess.Popen(['python', 'jukebox_lcd.py'], preexec_fn=os.setsid)

一切都很好,没关系:)

 类似资料:
  • 问题内容: 例如从bash: 仅杀死父进程。 问题答案: 当您将 负 PID传递给时,它实际上会通过该(绝对)数字将信号发送到过程 组 。您可以在Python中完成与之等效的操作。

  • 问题内容: 我需要制作一个从用户获取以下内容的脚本: 1)进程名称(在Linux上)。 2)此进程写入的日志文件名。 它需要终止该进程并确认该进程已关闭。将日志文件名更改为带有时间和日期的新文件名。然后再次运行该过程,确认它已启动,以便继续写入日志文件。 先谢谢您的帮助。 问题答案: 您可以使用以下命令检索给定名称的进程ID(PID): 希望这可以帮助

  • 我基本上是想让bash脚本永远运行节点脚本。我制作了以下bash脚本: 我希望当它运行时,它用给定的脚本启动节点,检查节点是否退出,如果退出,Hibernate6秒,然后重新打开节点。另外,我希望它在后台运行,并将其pid(bash pid)写入一个名为“pid”的文件中。 显然,上面解释的一切都如预期的那样工作,但我也期望当bash脚本的pid被杀死时,节点脚本将停止运行,我不知道为什么在我看来

  • 问题内容: 我在Python中使用子进程包运行一个子进程,以后需要杀死它。但是,子流程包的文档指出,terminate()函数仅从2.6起可用。 我们正在运行带有2.5的Linux,并且出于向后兼容的原因,我无法升级到2.6,替代品是什么?我猜这些功能是某些事情的便捷方法。 问题答案: 您在进程pid上调用os.kill。 您还可以,因为您使用的是Linux。Windows用户很不走运。

  • 问题内容: 我在前台启动了我的程序(守护程序),然后用杀死了它,但剩下一个僵尸,无法用杀死它。如何杀死僵尸进程? 如果僵尸是一个死进程(已被杀死),我如何将其从输出中删除? 问题答案: 僵尸已经死了,所以您无法杀死它。要清理僵尸,必须等待其父级等待,因此杀死父级应该可以消除僵尸。(父对象死后,僵尸将被pid 1继承,而pid 1将等待该僵尸并清除其在进程表中的条目。)如果守护程序正在生成成为僵尸的

  • 问题内容: 我从python脚本生成了5个不同的进程,如下所示: 我的问题是,当父进程(主脚本)以某种方式被杀死时,子进程继续运行。 当父进程被杀死时,有没有办法杀死这样生成的子进程? 编辑:我正在尝试: 但这似乎不起作用 问题答案: 我自己也遇到了同样的问题,我有以下解决方案: 打电话之前,您可以设置。然后如此处所述python.org multiprocessing 进程退出时,它将尝试终止其