如何仅运行 for 循环 x 次

如何仅运行 for 循环 x 次

我怎样才能只杀死多个进程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

相关内容