python 按名称而不是 PID 杀死 script.py
python kill script.py by name not PID
一个脚本在我的树莓派启动时自动启动,在这个脚本中有运动传感器,如果检测到,它会启动一个子进程camera.py(录制视频,然后转换视频和电子邮件)
在启动 u 的主脚本中,还有另一个 if 语句,如果按下按钮,则停止 camera.py 和其中的所有内容并执行其他操作。
我无法通过 PID 终止进程,因为它一直在变化。唯一的其他选择是通过它的名字杀死 camera.py,但它不起作用。
主脚本:
p1 = subprocess.Popen("sudo python /home/pi/camera.py", shell=True)
这是我的 camera.py 脚本:
import os
os.system("raspivid -n -o /home/pi/viseo.h264 -t 10000")
os.system(.... python script0.py
os.system(.... python script1.py
我能做到:
os.system("sudo killall raspivid")
如果我尝试
os.system("sudo killall camera.py")
它给我一条消息:找不到进程
这只会停止录制,但我也想杀死 camera.py
中的所有其他脚本
有人可以帮忙吗?谢谢
如果您使 camera.py 可执行,将其放在您的 $PATH 中并使脚本的第 1 行成为 #!/usr/bin/python
,然后执行 camera.py 而无需 python 命令在它前面,您的 "sudo killall camera.py"
命令应该可以工作。
使用pkill
:
$ sudo pkill -f camera.py
而不是使用:
import os
os.system("raspivid -n -o /home/pi/viseo.h264 -t 10000")
os.system(.... python script0.py)
os.system(.... python script1.py)
您应该使用与生成此进程的方式相同的 Popen 结构。
这使您可以访问调用的 Popen 对象。
import os
pvid = subprocess.Popen("raspivid -n -o /home/pi/viseo.h264 -t 10000")
p1 = subprocess.Popen(.... python script0.py)
p2 = subprocess.Popen(.... python script1.py)
然后你可以得到所有不同脚本的pid并通过它杀死它们。
这实际上应该通过关机序列来完成。
如果可以让它自行关闭,则永远不要强制关闭应用程序。
一个脚本在我的树莓派启动时自动启动,在这个脚本中有运动传感器,如果检测到,它会启动一个子进程camera.py(录制视频,然后转换视频和电子邮件)
在启动 u 的主脚本中,还有另一个 if 语句,如果按下按钮,则停止 camera.py 和其中的所有内容并执行其他操作。
我无法通过 PID 终止进程,因为它一直在变化。唯一的其他选择是通过它的名字杀死 camera.py,但它不起作用。
主脚本:
p1 = subprocess.Popen("sudo python /home/pi/camera.py", shell=True)
这是我的 camera.py 脚本:
import os
os.system("raspivid -n -o /home/pi/viseo.h264 -t 10000")
os.system(.... python script0.py
os.system(.... python script1.py
我能做到:
os.system("sudo killall raspivid")
如果我尝试
os.system("sudo killall camera.py")
它给我一条消息:找不到进程
这只会停止录制,但我也想杀死 camera.py
中的所有其他脚本有人可以帮忙吗?谢谢
如果您使 camera.py 可执行,将其放在您的 $PATH 中并使脚本的第 1 行成为 #!/usr/bin/python
,然后执行 camera.py 而无需 python 命令在它前面,您的 "sudo killall camera.py"
命令应该可以工作。
使用pkill
:
$ sudo pkill -f camera.py
而不是使用:
import os
os.system("raspivid -n -o /home/pi/viseo.h264 -t 10000")
os.system(.... python script0.py)
os.system(.... python script1.py)
您应该使用与生成此进程的方式相同的 Popen 结构。 这使您可以访问调用的 Popen 对象。
import os
pvid = subprocess.Popen("raspivid -n -o /home/pi/viseo.h264 -t 10000")
p1 = subprocess.Popen(.... python script0.py)
p2 = subprocess.Popen(.... python script1.py)
然后你可以得到所有不同脚本的pid并通过它杀死它们。
这实际上应该通过关机序列来完成。 如果可以让它自行关闭,则永远不要强制关闭应用程序。