私はこのコードを持っています:
for job in `jobs -p`; do
code=0;
wait ${job} || code=$?
if [[ "${code}" != "0" ]]; then
echo "At least one job failed with exit code => ${code}" ;
exit 1;
fi
done
次の行の直後:echo "終了コード=> $ {CODE}のため、1つ以上の操作が失敗しました。";
次のように失敗したコマンドを記録する行を追加したいと思います。
for job in `jobs -p`; do
code=0;
wait ${job} || code=$?
if [[ "${code}" != "0" ]]; then
echo "At least one job failed with exit code => ${code}" ;
echo "The job that failed was $(ps -p ${job})"
exit 1;
fi
done
job
aは単なる子プロセスのpidではありません。問題は次のようになります。
echo "The job that failed was $(ps -p ${job})"
あまり意味がありません。 pid = jobが与えられたら、実際にコマンドを実行する必要があります。
ベストアンサー1
コマンドを実行すると、ps
プロセスはすでに終了しています。 (返品コードを処理していますか?)
ps
スクリプトの前半でコマンドを実行し、wait
変数に保存するようにロジックを変更するだけです。
for job in $(jobs -p); do
process_info=$(ps -p "${job}" -o args=)
wait "${job}" || {
code=$?
echo "Job running [${process_info}] failed with exit code ${code}." >&2
exit 1
}
done