我已经编写了一个bash脚本,目的是运行.py模板Python脚本15,000次,每次都使用这个.py的稍微修改过的版本。每次运行一个.py之后,bash脚本都会将所发生的事情记录到一个文件中。
bash脚本,它在我的笔记本电脑上工作,计算15,000个东西。
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它启动进程,终端看起来像这样(或者类似的东西,数字只是为了说明的目的,它们并不准确):
[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个进程,依此类推。这样在任何给定的时间都不会有太多的进程在等待。也许这不会阻止旧电脑。
发布于 2021-04-10 00:47:12
在循环内,将以下代码添加到循环体的开头:
# insert this after `do`
[ "$(jobs -pr | wc -l)" -ge 2 ] && wait -n如果已经有两个或多个后台作业在运行,则会等待至少一个正在运行的作业终止。
https://stackoverflow.com/questions/67025065
复制相似问题