首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash脚本启动多个进程并阻塞计算机

问bash脚本启动多个进程并阻塞计算机
EN

Stack Overflow用户
提问于 2021-04-10 00:42:19
回答 1查看 29关注 0票数 1

我已经编写了一个bash脚本,目的是运行.py模板Python脚本15,000次,每次都使用这个.py的稍微修改过的版本。每次运行一个.py之后,bash脚本都会将所发生的事情记录到一个文件中。

bash脚本,它在我的笔记本电脑上工作,计算15,000个东西。

代码语言:javascript
复制
N_SIM=15000
for ((j = 1; j <= $N_SIM; j++))
do
    index=$((j))
    a0=$(awk "NR==${index} { print \$1 }" values_a0_in_Xenon_10_20_10_25_Wcm2_RRon.txt)
    dirname="a0_${a0}"
    mkdir -p $dirname
    cd $dirname
    awk -v s="a0=${a0}" 'NR==6 {print s} 1 {print}' ../integration.py > integrationa0included.py
    mpirun -n 1 python3 integrationa0included.py 2&> integration_Xenon.log &
    cd ..
done

它启动进程,终端看起来像这样(或者类似的东西,数字只是为了说明的目的,它们并不准确):

代码语言:javascript
复制
[1]
[2]
[3]
...
...
[45]
[1]: exit, success (a message along these lines)
[4]: exit, success
[46]
[47]
[48]
[2]: exit, success
...

完成一些已启动的进程并不断启动新进程的模式一直重复到15,000个进程启动和完成。

我想在一台非常旧的计算机上运行这个程序。问题是,它几乎立即启动了300个这样的进程,然后计算机就死机了。它基本上崩溃了。我不能执行CTRL+Z、CTRL+C或type。它被冻住了。

我想问您是否对bash脚本进行了修改,即只启动2个进程,等待1个进程完成,启动第3个进程,等待第2个进程完成,启动第4个进程,依此类推。这样在任何给定的时间都不会有太多的进程在等待。也许这不会阻止旧电脑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-10 00:47:12

在循环内,将以下代码添加到循环体的开头:

代码语言:javascript
复制
# insert this after `do`
[ "$(jobs -pr | wc -l)" -ge 2 ] && wait -n

如果已经有两个或多个后台作业在运行,则会等待至少一个正在运行的作业终止。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67025065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档