python kill script.py按名称而不是PID

python kill script.py按名称而不是PID,python,linux,kill,Python,Linux,Kill,当我的raspberry启动时,一个脚本会自动启动,在这个脚本中有一个运动传感器,如果检测到,它会启动一个subces camera.py(录制视频,然后转换视频和电子邮件) 在启动时启动u的主脚本中,有另一个if语句,如果按下按钮,则停止camera.py和其中的所有内容并执行其他操作 我无法通过PID终止进程,因为它一直在变化。唯一的另一个选择是按其名称杀死camera.py,但它不起作用 主脚本: p1 = subprocess.Popen("sudo python /home/pi/ca

当我的raspberry启动时,一个脚本会自动启动,在这个脚本中有一个运动传感器,如果检测到,它会启动一个subces 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
,然后在前面没有python命令的情况下执行camera.py,您的
“sudo killall camera.py”
命令应该可以工作。

如果您使camera.py可执行,请将其放在$PATH上,并在脚本的第1行
#/usr/bin/python
,然后在前面没有python命令的情况下执行camera.py,您的
“sudo killall camera.py”
命令应该可以工作。

使用
pkill

$ sudo pkill -f 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并通过它杀死它们

这实际上应该通过关闭顺序来完成。 如果可以让应用程序自行关闭,则不应强制关闭应用程序。

而应使用:

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并通过它杀死它们

这实际上应该通过关闭顺序来完成。
如果可以让应用程序自行关闭,则绝对不应强制关闭应用程序。

Sweet!比我的选择好得多!但有时可能会很危险,因为它使用模式匹配。谢谢!!!!!!!这是可行的,但是没有停止录制,而是杀死了摄像机内的所有其他脚本。py您应该只在绝对必要的情况下使用此方法,暴力关闭应用程序/脚本正在等待问题和/或数据损坏。@HeadhunterXamd是的,我已经提到过,有时非常危险。太好了!比我的选择好得多!但有时可能会很危险,因为它使用模式匹配。谢谢!!!!!!!这是可行的,但是没有停止录制,而是杀死了摄像机内的所有其他脚本。py只有在绝对必要的情况下才应使用此方法,强力关闭应用程序/脚本正在等待问题和/或数据损坏。@HeadhunterXamd是的,我已经提到过,有时会非常危险。从
子流程中
:“此模块打算替换几个旧模块和函数:os.system os.spawn*os.popen*popen2.*命令。*”从
子流程中
:“此模块打算替换几个较旧的模块和函数:os.system os.spawn*os.popen*popen2.*commands.*”