需求是这样的:我想在开启摄像头的同时将本地图像通过mjpg-streamer以及内网穿透将本地视频映射到公网,关闭摄像头时同时杀死mjpg-streamer与内网穿透
分别使用一个子进程
- 子进程打开mjpg-streamer推流
def op(self):
os.system('/home/pi/sh/openmjpg.sh')
直接使用终端命令即可,我已将开启mjpg-streamer的命令写入shell中,包括发送ip地址以及一些其他的功能
- 主进程创建子进程
self.p=multiprocessing.Process(target=self.op)
self.p.daemon=True#使用守护进程,当主进程退出时子进程随之退出
self.p.start()
问题:开启mjpg-streamer的进程PID与子进程不一致,子进程退出后mjpg-streamer仍然工作,可使用命令
ps -A|grep mjpg-stream
通过名称的方式查找进程
问题在于如何在Python中使用该命令找到进程PID并杀死呢
导入包:
import psutil
循环查找进程列表,发现列表中含进程名称即杀死
#进程名称
self.PROCNAME = "mjpg_streamer"
for proc in psutil.process_iter():
if proc.name() == self.PROCNAME:
proc.kill()
成功解决