2013-07-15 3 views
0

Я не могу выполнить 2 скрипта параллельно с помощью сценария оболочки.Невозможно запустить несколько сценариев параллельно

У меня есть 3 скрипта: script1.sh, script2.sh и installpackages.sh.

Моим требованием является script1.sh и script2.sh, которые должны выполняться параллельно в фоновом режиме, и после завершения script1.sh и script2.sh необходимо выполнить installpackages.sh.

selid1t601.xayybol.74> vi script.sh 
exec script1.sh & 
exec script2.sh & 

installpackages.sh 

Вы можете предложить, как я могу выполнить script1.sh и script2.sh параллельно?

ответ

1

Поскольку вы уже выполняете скрипты в фоновом режиме, они по существу работают параллельно. Единственное, что вам нужно - это wait, чтобы убедиться, что сценарии были выполнены, прежде чем перейти к последнему этапу. Вы должны сказать:

exec script1.sh & 
exec script2.sh & 
wait 
installpackages.sh 

От manual:

ждать

wait [jobspec or pid ...] 

Подождите, пока дочерний процесс, указанный каждым идентификатором процесса PID или работа спецификации jobspec выходы и возврат статуса выхода последней команды ждут для. Если задана спецификация задания, все процессы в задании ждут. Если аргументы не заданы, ожидаются все текущие активные дочерние процессы , а статус возврата равен нулю. Если ни jobspec ни PID определяет активный дочерний процесс оболочки, статус возвращения 127.

1

не делает exec в этом случае. это заменяет текущий процесс запущенной программой. просто запустить их как

bash script1.sh & 
bash script2.sh & 

или

./script1.sh & 
./script2.sh & 

и поставить wait позади, как сказал devnull.

+0

Использование 'exec' уменьшает количество необходимых процессов. './script1.sh &' сначала запускает новую оболочку, затем эта оболочка запускает процесс для 'script1.sh' для запуска.' exec ./script1.sh & 'открывает новую оболочку, затем эта оболочка заменяется * * в процессе для 'script1.sh'. – chepner

Смежные вопросы