一部を動作しません。問題は、最後の並列タスクが開始される前にクリーンアップ(rm
)が実行されることです。どのようにこのような行動を防ぐには?すべて開始されたジョブは、(manページより)バッシュ待ちは私のコードの
parallel --semaphore --wait
例を完了するのを
一部を動作しません。問題は、最後の並列タスクが開始される前にクリーンアップ(rm
)が実行されることです。どのようにこのような行動を防ぐには?すべて開始されたジョブは、(manページより)バッシュ待ちは私のコードの
parallel --semaphore --wait
例を完了するのを
は、彼らの例のように、あなたは待つようにこのコマンドを使用する必要があります。 コマンドSEMを並列--semaphoreの別名です。 (あなたが使用--semaphorename
を待つ必要は除く)
for i in *.log ; do
echo $i
sem -j10 gzip $i ";" echo done
done
sem --wait
'wait'部分は' sem'自体から呼び出さなければなりません。私はドキュメントでそれを逃した、ありがとう。 – alex
サム・ダニエルズの答えは完全に正しいのですが、sem
は本当に遅いです。代わりに関数を使用することを検討してください。
doit() {
i="$1"
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[@]}"
スクリプトで待機する非同期プロセスはありません。 '&'どこでも... – Kusalananda
'wait'はシェルの直接の子を待つだけです。他のプロセスが開始したプロセス( '' parallel'など)で ''待機 'することはできません。 – chepner