我怎样才能只杀死多个进程X次,而不只是继续运行一个循环来一直杀死它们?
只想运行 for 循环低于 10 次。
for pid in $(ps -ef | grep "helpdax.app" | awk '{print $2}'); do kill -9 $pid; done
答案1
如果您想杀死(使用 SIGKILL 信号 (-9) 及其所有潜在的戏剧性影响)最多 10 个参数列表包含 的进程helpdax.app
,您可以这样做:
pgrep -f 'helpdax\.app' | head -n 10 | xargs kill -s KILL
或者与ps
:
ps -Ao pid= -o args= |
awk -v n=10 '/helpdax\.app/ {print $1; if (!--n) exit}' |
xargs kill -s KILL
(尽管要注意某些ps
实现会截断args
列表。一般来说,比ps -o args
的情况较少ps -f
)。
作为对您的字面问题(或者至少是我的理解)的回答,要在类似 Bourne 的 shell 中尽早退出循环,您可以使用break
特殊的内置函数。
因此,要在循环中传递 10 次后退出,for
即使要循环的所有元素尚未处理,POSIXly:
n=10
for i in ...elements...; do
...body of the loop...
[ "$((n = n - 1))" -gt 0 ] || break
done
或者使用类似 Korn 的 shell(bash
在本例中是类似 Bourne、POSIX 和 Korn 的):
n=10
for i in ...; do
...
((--n)) || break
done