如何在Bash中启动多个进程

igo*_*gue 36 bash

我想启动100个进程bash,但for声明似乎不喜欢&符号,我得到一个语法错误,这是我到目前为止:

echo "Spawning 100 processes"
for i in {1..100}
do
    ./my_script.py &
done
Run Code Online (Sandbox Code Playgroud)

编辑:我是这个代码的复制品,这就是为什么&char是非法的.

dat*_*olf 54

echo "Spawning 100 processes"
for i in {1..100} ;
do
    ( ./my_script & )
; done
Run Code Online (Sandbox Code Playgroud)

  • 以这种方式编写它的好处是,你可以将代码的密码复制到交互式shell中,在那里运行 - 如果不将my_script调用放入表达式列表和分号中,它就无法工作.这可能是多余的,但有其原因.我怀疑OP可能已经在shell的交互模式下尝试了这个,因为他没有提供带#的脚本! (13认同)
  • 什么?考虑到OP的代码片段在语法上是有效的,分号是多余的,我不确定这里括号的效果是什么. (6认同)
  • @OliverCharlesworth:括号的效果是,括号内的列表在它们自己的子shell中执行,后台发生在该子shell内. (2认同)

Ole*_*nge 13

使用GNU Parallel,您可以:

echo "Spawning 100 processes"
parallel -j0 ./my_script.py ::: {1..100}
Run Code Online (Sandbox Code Playgroud)

或者为了避免参数1到100:

parallel -j0 -N0 ./my_script.py ::: {1..100}
Run Code Online (Sandbox Code Playgroud)

如果没有-j0,它将为每个CPU产生一个进程.

观看介绍视频了解更多详情:https://www.youtube.com/playlist?list = PL284C9FF2488BC6D1

  • 这应该是最好的答案! (2认同)
  • @DerekMahar这可以通过-N0来避免。 (2认同)