2014-09-04 2 views
0

Мне нужно запустить три блокирующие команды linux (command1, command2 & command3), и я выполнил синхронизацию, так что если пользователь запускает команду2 с помощью терминала2, а command1 выполняется в терминале1, мой сервер возвращает ошибку говоря, что команда1 все еще выполняется. То же самое для command3. Но если я делаю петлю, как показано нижеПроблема с синхронизацией с запущенными командами linux в фоновом режиме

for i in {1..3}; do { command$i & }; done 

Все три запускаются параллельно, что нежелательно. Это ошибка синхронизации, или я не должен запускать эти команды таким образом? Выполняют ли команды в фоновом режиме не то же самое, что запускать их в разных терминалах?

Я чувствую, что здесь отсутствует нечто очевидное. Пожалуйста, просветите меня.

ответ

0

Амперсанд помещает задания в фоновом режиме, которые немедленно возвращаются и имеют эффект запуска их параллельно. Чтобы запустить их последовательно, удалите &.

+0

Я понимаю это. Но мой вопрос, почему они вообще начинаются? Это моя ошибка синхронизации? Если я попробую запустить command2, используя другой терминал, пока команда1 все еще выполняется, я получаю ожидаемую ошибку, говорящую, что command1 все еще выполняется. – yalkris

+2

Возможно, работа 2 начинается до того, как будет установлена ​​синхронизация, которую вы выполняете на задании 1. Суть? – seanmcl

+0

Извините за путаницу. Я не хочу, чтобы они запускались последовательно. Мой вопрос заключается исключительно в обеспечении синхронизации, поэтому они не работают при параллельном запуске. Я соответствующим образом отредактировал свой вопрос. – yalkris

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