Unix下如何限制后台进程数

Naw*_*ikh 4 shell-script nohup background-process

我必须运行 100 个部分的脚本,同时确保在任何时间点只有 10 个部分并行运行。

下面的脚本将同时触发所有 100 个进程:-

for i in {1..100}
do
    nohup ksh my_background_script.ksh -mod ${i} &
done
Run Code Online (Sandbox Code Playgroud)

ter*_*don 8

有两种常用的工具xargs和 GNU parallel

  1. xargs较旧,默认情况下经常安装,但更受限制。你会像这样使用它:

     seq 1 100 | xargs -P 10 -I {} nohup ksh my_background_script.ksh -mod {} &
    
    Run Code Online (Sandbox Code Playgroud)

    -P 10是告诉它运行在并行10个处理。

  2. GNU parallel,虽然默认情况下没有安装在许多系统上,但应该可以随时用于任何 GNU/Linux 系统,并且比xargs. 你会像这样使用它(可能,细节取决于你正在运行的内容):

     parallel -j 10 nohup ksh my_background_script.ksh -mod ::: {1..100}
    
    Run Code Online (Sandbox Code Playgroud)

关于这两个程序及其各自用途的更多细节可以在这里找到:GNU parallel vs & (我的意思是背景) vs xargs -P