我有时会在我的shell中这样做:
sam@sam-laptop:~/shell$ ps aux | grep firefox | awk '{print $2}'
2681
2685
2689
4645
$ kill -9 2681 2685 2689 4645
有没有一种方法可以将包含PID的多行转换为由空格分隔的一行? (每次键入PID有点烦人,我真的很想学习 :)) 非常感谢。
使用xargs是简便的方法
ps aux | grep firefox | awk '{print $2}' | xargs kill -9
这将同时使用所有PID调用kill命令。(正是您想要的)
killall -9 firefox
pids=""
for pid in $(ps aux | grep firefox | awk '{print $2}')
do
pids=" $pid"
done
kill -9 $pids
pkill firefox
你可以只使用awk来完成这个任务
ps -eo pid,args | awk 'BEGIN{s="kill -9 "}$2~/bash/{s=s" "$1} END{system(s)}'
我同意其他回答中使用 pkill
的做法,但是...而且不要使用 xargs
,...你可以将其管道传递给 tr
:
kill $(ps aux | grep [f]irefox | awk '{print $2}' | tr '\n' ' ')
[f]
,以避免匹配grep进程本身。
killall
命令(并非所有地方都可用)。 - cobbal