满意答案
vip1999
推荐于 2016.11.21
采纳率:40% 等级:11
已帮助:6252人
严格来说,你的命令不是很严格。先不说这个问题了。
你的写法思路正确,只是在处理管道前边得到的内容时有三个小小的错误。
第一,要把grep 进程也一并过滤去。
grep 123换成grep -i grep |grep 123
第二,我们要处理这种情况,这就是不严格的所在。如果出现了出现进程名称也是123和1234的话,我们怎么处理,所以应该把awk '{print $2}'放到grep -i grep |grep 123它们之前,即grep -i grep | awk '{print $2}' |grep 123
第三,如果有两个或多个进程的id包含123,当然这种情况例外了一些,kill 前边的管道会返回多个值,如下
2123
1234
12345
这时通过kill命令执行一定会报错。
所以要做进一步修改
print $2要改成printf $2" "
这样如果遇到上面的特例,kill前边的管道就会得到:
"2123 1234 12345 "不包含引号
所以按照你的思路正确的做法是,
ps -ef |grep -i grep |awk '{printf $2" "}' |grep 123 | kill -9
其它有更好的实现,更建议用pkill和pgrep。多看man手册还是有好处的。有几位已经写到,不赘述了就。追问: 我想问问 这个写法是没错的, 就是这样执行的结果会执行后面的ERROR内容,这会是哪里的问题??
00分享举报