URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4169
[ Назад ]

Исходное сообщение
"Question: BASH programming - parallel processes"

Отправлено diver , 11-Апр-05 21:37 
Есть необходимость запустить параллельно две программы из скрипта, причем они должны возвращать код завершения для запуска третьей программы.

Только в случае успешного завершения двух первых, должна запускаться третья программа.

Существует ли возможность написать это для bash одной строкой?

Я надумал уже что-то, только нет возможности проверить:

1 вариант: (action1&;action2&)&&action3;
2 вариант: ((action1&)&&(action2&))&&action3;

есть какие-то идеи, наработки?


Содержание

Сообщения в этом обсуждении
"Question: BASH programming - parallel processes"
Отправлено madskull , 11-Апр-05 22:25 
Непременно одной строкой?

$ { command1 & pid1=$! ;}; { command2 & pid2=$! ;}; wait $pid1 $pid2


"Question: BASH programming - parallel processes"
Отправлено diver , 13-Апр-05 21:27 
Большое спасибо за подсказку!

Программа одной строкой не работает должным образом, но забив ее в файл и перенеся строки, заработало как надо!

============
#!/bin/sh

{
   /home/file1& pid1=$!;
};
{
   /home/file2& pid2=$!;
};

wait $pid1 $pid2;
exec /home/file3;
============

Я проверил, процессы действительно работают параллельно и третья не запустится без окончания их работы.

Вопрос: все-таки, есть ли возможность написать одной строкой?
Насколько я понял, $! - специальная переменная, возвращает pid запущенного приложения. Верно?
Существует ли хороший мануал по bash и программированию в shell на русском.
На сайте www.gnu.org есть отличный мануал, правда он на английском языке...

Спасибо за внимание!


"Question: BASH programming - parallel processes"
Отправлено madskull , 13-Апр-05 23:07 
>
>Вопрос: все-таки, есть ли возможность написать одной строкой?

можно, мой пример работает. Внимательно смотри на пробелы.
{ sleep 5 & pid1=$! ;};{ sleep 8 & pid2=$! ;};wait $pid1 $pid2;echo ok
здесь все пробелы нужны.

>Насколько я понял, $! - специальная переменная, возвращает pid запущенного приложения. Верно?
Верно, pid последнего фонового процесса, даже если он уже отработал.

>Существует ли хороший мануал по bash и программированию в shell на русском.
http://gazette.linux.ru.net/rus/articles/index-abs-guide.html

>Спасибо за внимание!
Всегда пожалуйста :)