过滤掉grep进程,其他全kill
ps aux | grep ping| grep -v grep | awk '{print $2}' | xargs kill -9
只kill 127.0.0.1的ping进程
ps aux | grep ping| grep -n 127.0.0.1 | awk '{print $2}' | xargs kill -9
步骤详解:
1、查找进程
ps aux 查找所有进程
2、过滤出要查找的进程
ps aux | grep tomcat 查找所有进程,并过滤出只含有tomcat的进程
其中,第二个进程
ning 2058 0.0 0.0 103320 888 pts/0 S+ 18:50 0:00 grep tomcat
为执行”ps aux | grep tomcat “自身的查找进程,所以要过滤掉
执行命令如下:
ps aux | grep tomcat | grep -v grep //过滤掉含有grep的进程
3、查找目标进程的pid
ps aux | grep tomcat | grep -v grep | awk '{print $2}'
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk [-F field-separator] ‘commands’ input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域, 1 表 示 第 一 个 域 , 1表示第一个域, 1表示第一个域,n表示第n个域。默认域分隔符是”空白键” 或 “[tab]键”,所以$1表示登录用户,$3表示登录用户ip,以此类推。
4、将pid通过管道传递到后面的命令
由于很多命令不支持|管道来传递参数,可使用xargs命令进行传参
如:
5、将Pid传递给kill进行杀线程操作
ps aux | grep tomcat | grep -v grep | awk '{print $2}' | xargs kill -9
至此,查找进程并杀死进程操作结束。
top命令查看,进程已不在。
kill.sh文件中的命令解析
#/bin/bash
currdir=`pwd`
echo $currdir
ps aux | grep $currdir | grep -v grep | awk '{print $2}' | xargs kill -9
- 1、查看”当前工作目录“的完整路径
pwd - 2、将目录赋值给currdir
currdir=pwd
注意用反引号 - 3、打印路径并执行查杀命令
ps aux | grep $currdir | grep -v grep | awk ‘{print $2}’ | xargs kill -9