gpt4 book ai didi

linux - 结束一个 mpirun 进程终止一个 b​​ash 循环

转载 作者:太空狗 更新时间:2023-10-29 12:41:19 26 4
gpt4 key购买 nike

我正在尝试使用 bash 脚本在 Ubuntu 14.04 LTS 机器上安排一系列 mpi 作业。基本上,我希望模拟在每个内核上运行一定时间,然后在该时间结束后终止并继续下一个案例。

当 mpi 在第一个作业结束时退出时,我的问题就出现了——它打破了循环并将终端返回给我的控制,而不是进入循环的下一次迭代。

我的脚本包含在下面。文件“case_names”只是目录名称的文本文件。我已经用其他命令测试了该脚本,在我取消对 mpirun 调用的注释之前它工作正常。

#!/bin/bash

while read line;
do
# Access case dierctory
cd $line
echo "Case $line accessed"

# Start simulation
echo "Case $line starting: $(date)"
mpirun -q -np 8 dsmcFoamPlus -parallel > log.dsmcFoamPlus &

# Wait for 10 hour runtime
sleep 36000

# Kill job
pkill mpirun > /dev/null
echo "Case $line terminated: $(date)"

# Return to parent directory
cd ..
done < case_names

有谁知道阻止 mpirun 像这样打破循环的方法吗?

到目前为止,我已经尝试过 GNOME 任务调度程序和任务假脱机程序,但都没有用(可能是因为在我使用的命令可用之前必须调用别名)。我真的宁愿不必求助于设置 slurm。我还尝试使用 disown 命令将 mpi 进程与我在其中运行调度脚本的 shell 分开,甚至编写了一个单独的脚本来终止调度脚本远程运行的进程。

非常感谢!

最佳答案

我设法找到了一种解决方法,可以让我按照自己的意愿使用 bash 脚本安排任务。由于这解决了我的问题,我将其作为答案发布(尽管我仍然欢迎解释为什么 mpi 在循环中以这种方式运行)。

解决方案在于为调用和终止 mpi 编写一个单独的脚本,调度脚本本身会调用它。由于这个子 bash 进程中没有循环,因此 mpi 在被杀死后打破它们没有问题。此外,一旦此脚本退出,调度循环就可以继续畅通无阻。

我的(现在工作的)代码包含在下面。

调度脚本:

while read line;
do
cd $line
echo "CWD: $(pwd)"
echo "Case $line accessed"
bash ../run_job
echo "Case $line terminated: $(date)"
cd ..
done < case_names

执行脚本(run_job):

mpirun -q -np 8 dsmcFoamPlus -parallel > log.dsmcFoamPlus &
echo "Case $line starting: $(date)"
sleep 600
pkill mpirun

我希望有人会觉得这很有用。

关于linux - 结束一个 mpirun 进程终止一个 b​​ash 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43003481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com