Несколько сценариев одновременно (bash)

Автор seisros, 27 августа 2013, 17:18:35

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

seisros

Мне нужно создать сценарий который запускает несколько других одновременно. Без && или || они должны стартовать одновременно.
Типа:
      2
     /
  [1]  – 4
     \
      3

Не по очереди, не по времени. А одновременно. как такое можно реализовать?

ZEN

запускай их в фоне

#!/usr/bin/env bash
script_2.sh & ; script_3.sh & ; script_4.sh &
Crimea is Ukraine


seisros

Цитата: ZEN от 27 августа 2013, 17:40:34
#!/usr/bin/env bash
script_2.sh & ; script_3.sh & ; script_4.sh &

Точка с запятой. Вспомнил. Спасибо.
Пока работаеш с одним языком, быстро забываеш особенности другого.

ZEN

Цитата: ogost от 27 августа 2013, 17:44:37получается по очереди, не?

Не совсем... амперсанд (символ &) в конце каждой команды означает запустить команду и не дожидаясь её завершения перейти к следующей команде. Если рассматривать в контексте скрипта, то в принципе всё можно было бы написать на разных строках

script_2.sh &
script_3.sh &
script_4.sh &


Конечно, какая-то доле секунда пройдёт между запуском каждого скрипта, но с учетом что ядро не реал-тайм и это bash-скрипт а не многопоточное приложение c++, то этот вариант вполне можно рассматривать как решение проблемы.
Crimea is Ukraine

smallNix

Если по-простому, то ZEN прав - дёшево и сердито. А если по уму - то тут большой вопрос насколько одновременно надо запускать. Bash - интерпретируемый, значит, получим доп. задержку да и приоритет у нашего процесса (оболочки), скорее всего не самый высокий. Можно, конечно, написать программку, которая создаёт потоки, а потом все вместе их стартует, например QT4 и класс QThread тебе в помощь, но всё равно процессы запускаются один за другим. С другой стороны, не так важно, насколько одновременно запущены процессы. Важно, что бы они в определённые моменты времени что-то делали не мешая друг-другу или, наоборот, взаимодействуя друг с другом - для этого существует синхронизация потоков.
В общем всё от задачи зависит.  ;)
Кто-то же должен что-то делать...