bash脚本只有在完成上一代码后才能运行多个C ++代码

时间:2017-03-30 00:10:28

标签: linux bash

我想在Linux集群上使用bash脚本运行多个C ++代码。我能够这样做,但由于多个代码在群集上同时运行,因此变得很慢。因此,我想使用bash脚本运行这些模拟,以便下一个代码仅在前一个代码完成时才开始运行。

我现在一直在使用sleep命令,指定它可能会运行的小时数,但由于我不知道手头的运行时间效率非常低。下一个代码必须等到睡眠时间结束。

这是我当前的bash脚本的外观

#!/bin/bash
cd /home/Rectilinear_box_Loverl_16
make clean
make -f Makefile
echo "L/l = 16 started"
./Rod input_file.xml > log &
sleep 14h
echo "L/l = 16 completed"

cd /home/Rectilinear_box_Loverl_14
make clean
make -f Makefile
echo "\nL/l = 14 started"
./Rod input_file.xml > log &
sleep 14h
echo "L/l = 14 completed"

cd /home/Rectilinear_box_Loverl_12
make clean
make -f Makefile
echo "\nL/l = 12 started"
./Rod input_file.xml > log &
echo "L/l = 12 completed"

每个代码需要不同的时间才能完成,但我已指定了最长的安全时间。

有人可以建议一个好方法吗?

3 个答案:

答案 0 :(得分:1)

删除&。它们使您的计算在后台执行。

./Rod input_file.xml > log &

可以:

./Rod input_file.xml > log

答案 1 :(得分:0)

如果您不在后台运行程序,则在特定运行完成之前,它不会移动到下一个命令。

例如,删除睡眠命令并执行以下操作:

./Rod input_file.xml > log

而不是:

./Rod input_file.xml > log &

删除指示它应该运行的&符号。另外我建议把它放在顶部:     触摸日志

并使用>>代替>附加到日志。

答案 2 :(得分:0)

您可以启动后台进程(在此示例中sleep 5是后台进程)并等待它。试试这个例子:

#!/bin/bash

# Do job #1
sleep 5 &
sleeppid=$!

# Wait for job #1 to finish
echo sleep started: $(date)
wait "$sleeppid"
echo sleep ended: $(date)

# Do job #2
sleep 5 &
sleeppid=$!

# Wait for job #2 to finish
echo sleep started: $(date)
wait "$sleeppid"
echo sleep ended: $(date)
相关问题