ssh $i "ps -ef | grep XXX | grep -v grep |awk '{print $2}' | xargs kill"
实际上就是根据XXX关键字搜索某一类进程PID然后干掉他 ,即批量杀死包含某个关键字的进程
例如:搜索含有spark关键字的进程PID
[root@bigdata-1 phm]# ps -ef | grep spark | grep -v grep |awk '{print $2}'
12978
17073
本问题的实质就是按照shell脚本中的任务名称关键字搜索出来,并打印出进程id然后kill掉。
脚本中关键术语解释:
- 管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
- "ps -ef" 是linux里查看所有进程的命令。这时检索出的进程将作为下一条命令"grep spark"的输入。
- "grep spark" 的输出结果是,所有含有关键字"spark"的进程。
- "grep -v grep" 是在列出的进程中去除含有关键字"grep"的进程。
- "awk '{print $2}" 是打印将过滤后的行的第二列,第二列正好是进程号PID。
- "xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
注意:该命令是杀掉的指定参数(关键词)的一类进程(多个)或运行指定参数命令的进程。
另外该命令还可以这样写:
ps -ef|grep spark|grep -v grep|cut -c 9-15|xargs kill -9
将awk '{print $2}'换成cut -c 9-15,不过建议用awk比较直观
[root@bigdata-1 phm]# ps -ef|grep spark|grep -v grep|cut -c 9-15
12978
17073