无论是Shell脚本处理或日常操作中,让我们根据服务名来杀进程,我们一般通用的做法
1. 先用ps -ef 或 ps aux来根据服务名来找到pid号
2. 然后使用kill -9 PID来杀进程
这样的杀个进程要两个步骤,耗时很大,而且有的进程号不只1个,有的时候是很多个,一个个执行手工,分别执行执行两个命令的话,耗时,耗力,有的时候还很容易出错。 这里有个合二为一的方法。
[root@local ~#] ps -ef | grep http | grep -v grep | awk '{print $2}' | xargs kill -9
- ps -ef 或 ps aux 这两者是最多的来查看静态的进程命令
- grep http 这里以http为例
- grep -v grep 将grep自身的进程排除在外,-v参数,除..之外
- awk '{print $2}' 获得进程号
- xargs命令会将前面命令的输出结果(pid)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程
这里可以写成一个小脚本
[root@localhost ~#] ./kill_process.sh http
[root@localhost ~#] vim kill_process.sh
#!/bin/bash
ps -ef | grep $1 | grep -v grep | awk '{print $2}' | xargs kill -9
如果需要定时去杀进程的话,比如说只要找到就杀,每10分钟去找一次,只需要在脚本修改一下
[root@localhost ~#] ./kill_process.sh http
[root@localhost ~#] vim kill_process.sh
#!/bin/bash
while [ 1 ]
do
ps -ef | grep $1 | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 600
done