如何高效编写Linux批量终止进程的详细脚本?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1188个文字,预计阅读时间需要5分钟。
使用场景:在程序中,存在大量并发进程,且进程数量较多的情况。例如,如下所示,需要通过控制台杀掉所有名为GSM_run.py的进程。
当需要结束所有GSM_run.py进程时,可以通过以下步骤操作:
1. 使用`ps`命令查找所有名为GSM_run.py的进程。
2.使用`kill`命令逐个结束这些进程。
步骤如下:
1. 打开终端或命令行界面。
2.输入`ps -ef | grep GSM_run.py`命令,列出所有GSM_run.py进程。
3.从输出中找到需要结束的进程ID。
4.对每个进程ID,执行`kill`命令,例如:`kill -9 PID`(其中PID是进程ID),逐个结束进程。
这个过程可能较为繁琐且耗时,尤其是在进程数量众多的情况下。
使用场景当程序中有使用到多进程且进程数较多的情况,如下图,且需要通过控制台杀死所有的 GSM_run.py 的进程时,利用 kill 命令一个一个的去结束进程是及其耗时且繁琐的,这时就需要我们的kill多进程的命令工作了。
批量 Kill 进程命令:
ps -ef|grep GSM_run.py|grep -v grep|cut -c 9-15|xargs kill -9
命令说明 :
1、管道符 "|" 用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
2、"ps -ef" 是 查看所有进程
其中 ps -aux 也是查看所有进程 不过两者右以下区别:
(1)-ef是System V展示风格,而-aux是BSD风格
Unix操作系统在操作风格上主要分为System V和BSD
(2)COMMADN列如果过长,-aux会截断显示,而-ef不会
(3)-aux可以查看进程的CPU占用率和内存占用率,而-ef不能
3、 "grep GSM_run.py" 列出含有关键字"GSM_run.py"的所有进程
4、"grep -v grep"是在列出的进程中去除含有关键字"grep"的进程
5、"cut -c 9-15"是截取输入行的第9个字符到第15个字符,而这正好是进程号PID
某些情况下 9-15 是 不够的 可以 写成 awk '{print $2}' 其 表示 按空格分割取第二个元素,即取进程号 PID。此时完整的命令为 :
ps -ef|grep GSM_run.py|grep -v grep|awk '{print $2}'|xargs kill -9
6、"xargs kill -9" xargs命令把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行
更简单的办法pkill
杀死指定名字的所有进程
直接指定进程名字 而无需使用 ps 获得进程PID,十分简单,建议采用
pkill -9 GSM_run.py
但是要注意,当你的进程名字中包含空格时(python train.py),无法使用进程名的全称作为kill 的name,会报错:
且此时不能使用空格后面的部分名称作为kill name(如上图中的 train.py),不然无法kill成功,要使用空格前的名称(如上图中的 python)。
除了批量 kill 同名或部分同名的进程外,还可以kill所有同一指定用户底下的所有进程
pkill -u pc ## kill pc 用户的所有的用户的进程
pkill -vu root ## kill 除了 root 用户外的所有的用户的进程
killall
与 pkill 类似,也是可以按照指定的进程名字杀死对应的所有进程
killall -9 GSM_run.py
在运行时可能会报错,说没有 killall 命令:
解决:安装即可
ubuntu系统下:
apt-get install psmisc
centos系统下:
yum install -y psmisc
同样的要注意,当你的进程名字中包含空格时(python train.py),使用空格后的部分名称作为kill name,会报错, 且无法kill进程:
使用进程名的全称(python train.py)作为kill 的name,也会报错,但是对应的进程被kill了,这与pkill不一样,因为其从空格前的部分名称(python)就已经找到对应的进程了,这从其报错信息可以看出端倪:
而使用空格前的名称( python)就不会报错,且能 kill 对应进程
本文共计1188个文字,预计阅读时间需要5分钟。
使用场景:在程序中,存在大量并发进程,且进程数量较多的情况。例如,如下所示,需要通过控制台杀掉所有名为GSM_run.py的进程。
当需要结束所有GSM_run.py进程时,可以通过以下步骤操作:
1. 使用`ps`命令查找所有名为GSM_run.py的进程。
2.使用`kill`命令逐个结束这些进程。
步骤如下:
1. 打开终端或命令行界面。
2.输入`ps -ef | grep GSM_run.py`命令,列出所有GSM_run.py进程。
3.从输出中找到需要结束的进程ID。
4.对每个进程ID,执行`kill`命令,例如:`kill -9 PID`(其中PID是进程ID),逐个结束进程。
这个过程可能较为繁琐且耗时,尤其是在进程数量众多的情况下。
使用场景当程序中有使用到多进程且进程数较多的情况,如下图,且需要通过控制台杀死所有的 GSM_run.py 的进程时,利用 kill 命令一个一个的去结束进程是及其耗时且繁琐的,这时就需要我们的kill多进程的命令工作了。
批量 Kill 进程命令:
ps -ef|grep GSM_run.py|grep -v grep|cut -c 9-15|xargs kill -9
命令说明 :
1、管道符 "|" 用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
2、"ps -ef" 是 查看所有进程
其中 ps -aux 也是查看所有进程 不过两者右以下区别:
(1)-ef是System V展示风格,而-aux是BSD风格
Unix操作系统在操作风格上主要分为System V和BSD
(2)COMMADN列如果过长,-aux会截断显示,而-ef不会
(3)-aux可以查看进程的CPU占用率和内存占用率,而-ef不能
3、 "grep GSM_run.py" 列出含有关键字"GSM_run.py"的所有进程
4、"grep -v grep"是在列出的进程中去除含有关键字"grep"的进程
5、"cut -c 9-15"是截取输入行的第9个字符到第15个字符,而这正好是进程号PID
某些情况下 9-15 是 不够的 可以 写成 awk '{print $2}' 其 表示 按空格分割取第二个元素,即取进程号 PID。此时完整的命令为 :
ps -ef|grep GSM_run.py|grep -v grep|awk '{print $2}'|xargs kill -9
6、"xargs kill -9" xargs命令把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行
更简单的办法pkill
杀死指定名字的所有进程
直接指定进程名字 而无需使用 ps 获得进程PID,十分简单,建议采用
pkill -9 GSM_run.py
但是要注意,当你的进程名字中包含空格时(python train.py),无法使用进程名的全称作为kill 的name,会报错:
且此时不能使用空格后面的部分名称作为kill name(如上图中的 train.py),不然无法kill成功,要使用空格前的名称(如上图中的 python)。
除了批量 kill 同名或部分同名的进程外,还可以kill所有同一指定用户底下的所有进程
pkill -u pc ## kill pc 用户的所有的用户的进程
pkill -vu root ## kill 除了 root 用户外的所有的用户的进程
killall
与 pkill 类似,也是可以按照指定的进程名字杀死对应的所有进程
killall -9 GSM_run.py
在运行时可能会报错,说没有 killall 命令:
解决:安装即可
ubuntu系统下:
apt-get install psmisc
centos系统下:
yum install -y psmisc
同样的要注意,当你的进程名字中包含空格时(python train.py),使用空格后的部分名称作为kill name,会报错, 且无法kill进程:
使用进程名的全称(python train.py)作为kill 的name,也会报错,但是对应的进程被kill了,这与pkill不一样,因为其从空格前的部分名称(python)就已经找到对应的进程了,这从其报错信息可以看出端倪:
而使用空格前的名称( python)就不会报错,且能 kill 对应进程

