Como foi apontado , você não pode usar ps
em um processo não existente.
Se você tem um bash
que suporta matrizes associativas:
declare -A jobinfo
# collect job information
joblist=( $(jobs -p) )
for pid in "${joblist[@]}"; do
jobinfo["$pid"]="$( ps -p "$pid" -o args= )"
done
# later...
# wait for jobs
err=0
for pid in "${joblist[@]}"; do
if ! { wait "$pid" || ! (( code=$? )); }; then
printf 'Got non-zero exit status (%d) from PID %d: %s\n' \
"$code" "$pid" "${jobinfo[$pid]}"
err=1
fi
done
# exit 0 if all was good, exit 1 otherwise
exit "$err"
Aqui eu coleciono todos os dados necessários antes de começar a esperar que os trabalhos saiam. Também espero que todas as tarefas todas sejam concluídas, para que o usuário obtenha informações sobre não apenas o primeiro trabalho com falha.
Sem usar matrizes associativas (deve funcionar no padrão bash
no macOS):
# collect job information
joblist=( $(jobs -p) )
for pid in "${joblist[@]}"; do
jobinfo+=( "$( ps -p "$pid" -o args= )" )
done
# later...
err=0
i=0
for pid in "${joblist[@]}"; do
if ! { wait "$pid" || ! (( code=$? )); }; then
printf 'Got non-zero exit status (%d) from PID %d: %s\n' \
"$code" "$pid" "${jobinfo[$i]}"
err=1
fi
i=$(( i + 1 ))
done
exit "$err"