Answers:
好老的怎么了,
for pid in $(ps -ef | grep "some search" | awk '{print $2}'); do kill -9 $pid; done
有多种方法可以提高效率,
for pid in $(ps -ef | awk '/some search/ {print $2}'); do kill -9 $pid; done
和其他变体,但从根本上讲,它一直对我有用。
echo kill -9 $pid
无论如何,我总是将它作为第一篇,所以我知道自己会得到什么。我不确定AIX是否有pkill
UNIX,这是我的基本面。而且真的很糟糕以至于无法投票-奇怪。
csh
使用killall,
killall vi
这将杀死所有名为“ vi”的命令
您也可以添加一个信号,例如SIGKILL
killall -9 vi
killall -9 vi
killall
上,其名称所暗示的功能完全符合它的要求……它杀死了init进程。
pkill
如果可以的话(Linux,FreeBSD,NetBSD,OpenBSD,Solaris),这是我的建议。您可以通过命令名称,完整的命令行或其他条件指定进程。例如,pkill vi
杀死所有命令名称包含substring的程序vi
。要杀死仅被调用的进程vi
,请使用pkill -x vi
。要仅vi
终止以最后一个参数结尾的进程.conf
,请使用pkill -fx 'vi.*\.conf'
。
要查看pkill
向其发送信号的PID的列表,请使用pgrep
,其语法完全相同,但不接受信号名称或数字。要查看有关这些过程的更多信息,请运行
ps -p "$(pgrep …)"
在Linux下,您需要ps -p $(pgrep -d, …)
代替(这是一个错误:Linux ps
不兼容POSIX)。
标识要杀死的进程的另一种常见方法是打开了某个文件的进程(可以是该进程的可执行文件)。您可以通过以下方式列出这些内容fuser
:用于fuser -k
向他们发送信号。例如,fuser -k /usr/bin/find
杀死的所有正在运行的项目find
。
如果有一个失控的流程一直在分叉,则可能需要立即杀死整个流程组。流程组由其领导者的否定标识,这是该组中所有流程的祖先流程。要查看某个进程所属的进程组,请运行ps -o pgid
(加上任何选项以选择要显示的进程)。如果您确定要终止的进程组长1234和它的所有儿童,运行kill -1234
或kill -HUP -1234
或其他任何信号。
如果找不到更好的方法,请使用ps
适当的选项列出所有进程并使用grep
或其他一些文本过滤命令对其进行过滤。注意不要意外地使碰巧正在运行具有相似名称或包含该名称的参数的命令的其他进程匹配。例如:
kill $(ps -o pid -o comm | awk '$2 == "vi" {print $1}')
请记住,您的grep
或awk
命令本身可能会在ps
输出中列出(ps
并且过滤命令是并行启动的,因此它是否显示取决于时间)。如果命令参数包含在ps
输出中,这尤其重要。
pkill
这里很好。您可以给它提供很多参数来完善模式。
pkill
在Linux,BSD和Solaris-afaik上可用。所以它的传播比更大killall
。
最简单的方法是首先使用以下命令检查您是否获得了正确的进程ID:
pgrep -f [part_of_a_command]
如果结果符合预期。与:
pkill -f [part_of_a_command]
pgrep -f "command name"
我建议你试试pkill
。
例如: ps -ef | pkill -f command
要显示所有要杀死的进程的列表,请尝试pgrep
:
例如: ps -ef | pgrep -f command
ps -ef
到pkill
或的目的是什么pgrep
?这些命令不从标准输入中读取。
ps -ef | pgrep -f "search" | xargs kill -9
pkill
fromprocps
软件包。