我有时会在我的shell中这样做:
sam@sam-laptop:~/shell$ ps aux | grep firefox | awk '{print $2}'
2681
2685
2689
4645
$ kill -9 2681 2685 2689 4645
有没有办法可以将包含PID的多行转换为由空格分隔的一行? (每次输入PID都有点烦人,我真的想学习:))
非常感谢。
答案 0 :(得分:11)
这方面的简单方法是使用xargs
ps aux | grep firefox | awk '{print $2}' | xargs kill -9
这将同时调用带有所有pid的kill命令。 (正是你想要的)
答案 1 :(得分:6)
killall -9 firefox
答案 2 :(得分:2)
pids=""
for pid in $(ps aux | grep firefox | awk '{print $2}')
do
pids=" $pid"
done
kill -9 $pids
答案 3 :(得分:2)
请改用pkill。还有一个pgrep。
这会做你想要的,你能得到多少简单?
pkill firefox
使用-9选项进行pkill将是您目前所做的事情;但是,避免使用SIGKILL:
请勿轻易使用此信号。这个过程没有任何机会清理。它可能会留下孤立的子进程,临时文件,分配的锁,活动的共享内存段,繁忙的套接字以及任何数量的其他资源状态不一致。这可能导致在系统的后续操作中出现令人惊讶且难以调试的问题。 [wlug.org]
和
顺便说一下,这是你不应该经常使用的一个原因 SIGKILL。 SIGKILL只应在进程使用时使用 挂着,不能以任何其他方式杀死。如果你使用 python脚本中的SIGTERM或SIGINT,你会看到 mplayer将使终端处于USABLE状态。如果你 经常使用SIGKILL程序没有机会 清理任何东西,可能会对你的整体造成不利影响 在某些情况下系统。
SIGTERM是kill shell命令发送的默认信号。 SIGINT是从终端中断(control-C)发送的信号。 [debian.org]
答案 4 :(得分:2)
你可以用awk
来做ps -eo pid,args | awk 'BEGIN{s="kill -9 "}$2~/bash/{s=s" "$1} END{system(s)}'
答案 5 :(得分:2)
我同意关于使用pkill
的所有其他回复,但是,...而不是使用xargs
,...您可以将其传递给tr
:
kill $(ps aux | grep [f]irefox | awk '{print $2}' | tr '\n' ' ')
另外,请考虑使用[f]
,以便与grep进程本身不匹配。