Я пытаюсь создать скрипт, который запустит много фоновых команд. Для каждой фоновой команды мне нужно получить код возврата.
Я пробовал следующий скрипт:
#!/bin/bash
set -x
pid=()
return=()
for i in 1 2
do
echo start $i
ssh mysql "/root/test$i.sh" &
pid[$i]=$!
done
for i in ${#pid[@]}
do
echo ${pid[$i]}
wait ${pid[$i]}
return[$i]=$?
if [ ${return[$i]} -ne 0 ]
then
echo mail error
fi
done
echo ${return[1]}
echo ${return[2]}
Моя проблема во время цикла ожидания: если второй pid завершится раньше первого, я не смогу получить код возврата.
Я знаю, что могу запустить wait pid1 pid2, но с помощью этой команды я не могу получить код возврата всех команд.
Есть идеи ?
Ответ Стефана хорош, но я бы предпочел
который будет перебирать ключи
pid
массива, независимо от того, какие записи все еще существуют, так что вы можете адаптировать его, выйти из цикла и перезапустить весь цикл, и он будет просто работать. И вам не нужны последовательные значенияi
для начала.Конечно, если вы имеете дело с тысячами процессов, то, возможно, подход Сепана будет несколько более эффективным, если у вас есть непрозрачный список.
источник