linux批量杀死进程
# 注意awk后面要用单引号
ps -ef | grep xxx | grep -v grep | awk '{print $2}' | xargs kill -9
grep -v grep
: 显示不包含匹配文本的所有行
-
在这里为筛选出所有不包含grep名称的进程,对上一步的进程再做一次筛选(因为ps -ef列出了所有的命令,包括命令行),例如会将grep --color=auto uwsgi进程过滤掉
[root@cloud love-web]# ps -ef | grep uwsgi root 20707 1 2 17:07 ? 00:00:00 uwsgi --ini /root/fhu/love-web/uwsgi.ini root 20711 20707 0 17:07 ? 00:00:00 uwsgi --ini /root/fhu/love-web/uwsgi.ini root 20720 14774 0 17:07 pts/1 00:00:00 grep --color=auto uwsgi [root@cloud love-web]# ps -ef | grep uwsgi | grep -v grep root 20707 1 2 17:07 ? 00:00:00 uwsgi --ini /root/fhu/love-web/uwsgi.ini root 20711 20707 0 17:07 ? 00:00:00 uwsgi --ini /root/fhu/love-web/uwsgi.ini
awk
:在文件或字符串中基于指定规则浏览和抽取信息;把文件逐行读入,以空格为默认分隔符将每行切片,然后再进行后序处理。
-
这里利用awk '{print $2}'将上一步中过滤得到的进程进行打印,$2表示打印第二个域(PID即进程号) $0表示所有域,$1表示第一个域,$n表示第n个域。
[root@cloud love-web]# ps -ef | grep uwsgi | grep -v grep | awk '{print $2}' 20707 20711
xargs
:给命令传递参数的过滤器,善于把标准数据数据转换成命令行参数。
- 在这里则是将获取前一个命令的标准输出然后转换成命令行参数传递给后面的kill命令。