Bash 等待不起作用
Bash wait does not work
我的部分代码:
for i in "${r_arr[@]}"
do
${parallel_dir}parallel -j${cap} --semaphore --semaphorename a2_bootstrap_semaphore_${rnd} a2_exec ${i} ${temp_zmat_folder_path}${temp_zmat_folder}/ ${outs_folder}
done
wait
elapsed_time=$(($SECONDS - $start_time))
rm -rf "${temp_zmat_folder_path}${temp_zmat_folder}"
echo "Cleanup done."
echo "`date +%d-%m-%y` `date +%T`: All processing finished in ${elapsed_time} seconds!"
如您所见,我正在使用 GNU Parallel 开始一些任务。问题是清理 (rm
) 在最后一个并行任务甚至开始之前就已经执行了。如何防止此类行为?
按照他们的示例,您应该使用此命令等待所有已启动的作业完成
parallel --semaphore --wait
示例(来自手册页):
命令 sem
是 parallel --semaphore
.
的别名
for i in *.log ; do
echo $i
sem -j+0 gzip $i ";" echo done
done
sem --wait
Sam Daniels 的回答是完全正确的(除非你需要等待你使用的 --semaphorename
),但是 sem
真的很慢。考虑改用函数:
doit() {
i=""
a2_exec ${i} ${temp_zmat_folder_path}${temp_zmat_folder}/ ${outs_folder}
}
export -f doit
export temp_zmat_folder_path
export temp_zmat_folder
export outs_folder
${parallel_dir}parallel -j${cap} doit ::: "${r_arr[@]}"
我的部分代码:
for i in "${r_arr[@]}"
do
${parallel_dir}parallel -j${cap} --semaphore --semaphorename a2_bootstrap_semaphore_${rnd} a2_exec ${i} ${temp_zmat_folder_path}${temp_zmat_folder}/ ${outs_folder}
done
wait
elapsed_time=$(($SECONDS - $start_time))
rm -rf "${temp_zmat_folder_path}${temp_zmat_folder}"
echo "Cleanup done."
echo "`date +%d-%m-%y` `date +%T`: All processing finished in ${elapsed_time} seconds!"
如您所见,我正在使用 GNU Parallel 开始一些任务。问题是清理 (rm
) 在最后一个并行任务甚至开始之前就已经执行了。如何防止此类行为?
按照他们的示例,您应该使用此命令等待所有已启动的作业完成
parallel --semaphore --wait
示例(来自手册页):
命令 sem
是 parallel --semaphore
.
for i in *.log ; do
echo $i
sem -j+0 gzip $i ";" echo done
done
sem --wait
Sam Daniels 的回答是完全正确的(除非你需要等待你使用的 --semaphorename
),但是 sem
真的很慢。考虑改用函数:
doit() {
i=""
a2_exec ${i} ${temp_zmat_folder_path}${temp_zmat_folder}/ ${outs_folder}
}
export -f doit
export temp_zmat_folder_path
export temp_zmat_folder
export outs_folder
${parallel_dir}parallel -j${cap} doit ::: "${r_arr[@]}"