Выполнить несколько программ одновременно в сценарии инициализации / bash
Вопрос
Здравствуйте, я работаю с симулятором, который использует скрипты rcS для загрузки, это мой скрипт
cd /tests
./test1 &
./test2 &
./test3 &
./test4
exit
Я хочу, чтобы все тесты выполнялись одновременно, и чтобы команда выхода выполнялась только после завершения всех предыдущих тестов. И это возможно не только после завершения теста 4? Спасибо.
Решение
Вы можете использовать wait:
./test1 &
./test2 &
./test3 &
./test4 &
wait
Со страницы руководства bash:
подождите [n ...] Дождитесь каждого указанного процесса и верните его статус завершения. Каждый п может быть идентификатор процесса или спецификация работы; если задана спецификация работы, все процессы в конвейер этой работы ждут. Если n не задано, ожидаются все активные в данный момент дочерние процессы, и статус возврата равен нулю. Если н указывает на несуществующий процесс или задание, статус возврата 127. В противном случае возвращаемый статус статус выхода последнего процесс или работа ожидали.
Другие советы
xargs
может поддерживать параллель
Так вот так:
seq 4|xargs -i -n 1 -P 4 ./test{}
Что-то вроде
cd /tests
./test1 &
./test2 &
./test3 &
./test4 &
wait
exit
(я предполагаю, что оболочка bash)