杀死进程
背景说明
在服务器的日常管理工作中程序经常的查找杀死是一个很常见的任务,因为每次程序启动的进程号是不一样的,但我们往往需要在知道程序名而不知道进程号的情况下去结束某程序的运行。比如某统计任务特别耗时,时而出现第二天任务已启动前一天计算任未完成的情况,从业务上来说之前的数据已经没有计算必要了,这就需要在每天新的计算任务启动前去结束老的任务,以节约机器资源消耗。
问题分析
假设我们的通过程序名称叫做“statProcess4Killed”,我们知道,通过ps
命令和grep
命令可以根据名称过滤出统计程序的进程号信息,如:
$ps -elf|grep statProcess4Killed|grep -v grep
0 S root 16993 16992 0 80 0 - 186892 futex_ 2014 ? 04:20:22 statProcess4Killed
其中的16993就是我们需要的程序运行进程号,通过管道传递给awk进行解析,然后输出使用xargs
命令就能完成我们目标的功能了。
解决方案
$ps -elf|grep statProcess4Killed|grep -v grep |awk '{print $4}'|xargs kill -9
实现很简单,仅仅只有一行代码:先是通过ps
命令获取本机所有正在运行进程的列表,然后传递给grep
命令过滤出满足我们条件的进程行,然后通过awk
打印输出其进程号,最后再通过xargs
命令将输出信息传递给kill
命令,将进程杀死。