ps -ef | grep python | grep -v grep | awk '{print $2}' | sudo xargs kill -9ps -ef :输出所有进程信息grep python : 查找所有与python相关的进程grep -v grep : 忽略grep进程awk ‘{print $2}’ : 获得进程号sudo xargs kill -9 : 杀死前面查询到的进程...
p
grep
ProcessName |awk '{print $1}' | xargs -I{} kill -9 {}
主要原理就是把输出的参数给到后边kill那里,第一个报错可能是那个显示的号不是pid,具体我也不太清楚名单时p
grep
这个指令只显示一个
进程
号绝对不会出错
需求是这样的:我想在开启摄像头的同时将本地图像通过mjpg-streamer以及内网穿透将本地视频映射到公网,关闭摄像头时同时
杀死
mjpg-streamer与内网穿透
分别使用一个子
进程
子
进程
打开mjpg-streamer推流
d
ef
op(self):
os.system('/home/pi/sh/openmjpg.sh')
直接使用终端命令即可,我已将开启mjpg-streamer的命令写入shell中,包括发送ip地址以及一些其他的功能
主
进程
创建子
进程
self.p=
ps
-
ef
|
grep
python
|
grep
-v
grep
|cut -c 9-15|xargs kill -15
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的
几个命令:
“
ps
aux”是linux 里查看所有
进程
的命令。这时检索出的
进程
将作为下一条命令“
grep
python
”的输入。
“
grep
python
”的输出结果是,所有含有关键字“
python
”的
进程
,这是
python
程序
“
grep
-v
grep
”是在列出的
进程
中去
ps
-
ef
|
grep
python
显示所有名字中有
python
的
进程
ps
-
ef
|
grep
'myProcessName' |
grep
-v
grep
| awk '{print $2}' | xargs -r kill -9
杀死
名字含有myProcessName的所有
进程
python
程序使用了多线程,然后我用ctrc+c中断,然后再执行发现出现被
杀死
的错误,从源码上进行了大量检查与修改,仍无法解决问题;
最后通过kill掉所有与
python
相关的程序
重新运行就OK了
ps
aux|
grep
python
|
grep
-v
grep
|cut -c 9-15|xargs kill -9
d
ef
get_process_pid(name):
child = os.popen("
ps
-
ef
|
grep
"+name).readline()
response = child.split(' ')
print(response)
for i in...
在命令行模式下的树莓派,如果我们想要
杀死
一些批量生成的
进程
,如果只是手动的进行操作,那将会很累人。
其次,如果我们在程序中,比如播放音乐的程序,我们想让之前还没播放完的音乐闭嘴,那我们就得对音乐
进程
进行闭嘴处理。
其实很简单,也是使用到了subprocess库。
注释和代码如下:
import os
import sys
import subprocess
d
ef
get_process_id(name):
# 使用命令获取相关
进程
信息
child = subprocess.Pop
在上面的代码中,os.fork()创建了一个子
进程
,子
进程
进入死循环,父
进程
使用os.kill函数向子
进程
发送SIGTERM信号,通知它退出。子
进程
收到信号后,可以通过signal模块中的signal函数注册一个信号处理函数并在其中退出程序。代码修改如下:
```
python
import os
import signal
d
ef
handler(signum, frame):
os._exit(0)
pid = os.fork()
if pid == 0: # 子
进程
signal.signal(signal.SIGTERM, handler) # 注册信号处理函数
while True:
pass # 死循环
else: # 父
进程
os.kill(pid, signal.SIGTERM) # 向子
进程
发送退出信号
另一种方法是使用multiprocessing模块中的Process类,它提供了terminate函数,可以直接
杀死
子
进程
。代码如下:
```
python
import multiprocessing
d
ef
f():
while True:
pass # 死循环
p = multiprocessing.Process(target=f)
p.start()
p.terminate() # 终止子
进程
以上是两种常用的关闭死循环子
进程
的方法,需要根据实际情况选择最适合自己的方式来实现。