使用Bash自动杀死匹配进程

时间:2014-05-28 08:01:10

标签: linux bash shell

我需要创建一个脚本(.sh),我可以使用它在一个命令中杀死进程。

当我做$ pgrep -f vmware

它显示了一个列表:

2234
2241
2251
2296
4751

现在我需要为每一个sudo kill -9 4751

有没有办法将其自动化为

sh sudokiller.sh vmware那么它会自动完成任务吗?还是有更好的方法?

2 个答案:

答案 0 :(得分:3)

你想要pkill;它与pgrep具有完全相同的命令行选项:

$ pkill -?
Usage: pkill [-SIGNAL] [-fvx] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]
    [-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN]

事实上,在我的系统上(Slackware 14.1)/usr/bin/pgrep实际上是/usr/bin/pkill的符号链接,在pgrep运行时进行搜索,在pkill运行时进行搜索

示例:

me@host:~$ pgrep -f test.sh
1927
1932
1937
1945
1950
1955
1960
1965
1970
1975
1980
me@host:~$ pkill -f test.sh
me@host:~$ pgrep -f test.sh
me@host:~$

答案 1 :(得分:2)

使用循环:

for pid in `pgrep -f vmware` ; do
    sudo kill -9 $pid
done

或者,只需使用

sudo killall -9 vmware