LINUX.ORG.RU

[shell] Параллельное выполнение


0

1

Извините, если глупость.

Есть несколько переменных V1 - Vn, которые получают свои значения как вывод некоторой программы P в конструкции:

V1 = `P -...`
V2 = `P -...`
...
Vn = `P -...`

Хочется сделать так, чтобы запуск каждого следующего экземпляра программы P начинался не дожидаясь окончания предыдущего. После запуска всех P, сценарий должен дождаться завершения присвоения значения всем переменным Vi.

IF [возможно?] THEN пните куда смотреть FI.

★★

амперсанд в конце перенесет задачу в фон. ( V1 = `P -...` & )

wait - ждет, пока завершатся процессы

Waterlaz ★★★★★ ()

Насколько я понимаю, это невозможно (и вообще семантика присваивания другая). Выводи в файлы или named pipes.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Ох. В файлы оно, конечно, не удобно, но видимо придётся. А правильно ли я понимаю, что судить о завершении всех экземпляров P я смогу только через ps или по записям в этих самых файлах и никак иначе?

dumka ★★ ()
Ответ на: комментарий от dumka

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

foo &
foo_pid=$!
wait $foo_pid
tailgunner ★★★★★ ()

И, наверное, можно извратиться как-то с exec, чтобы обойтись без временных файлов, но это (даже если возможно) слишком черная магия.

tailgunner ★★★★★ ()

чтобы не изобретать велосипеды и обходить грабли, есть специальные тулзы для 'массового' паралельного исполнения. Советую посмотреть parallel и pexec.

Всё равно одним только wait не обойтись :( По хорошему надо оптимизировать число одновременных исполнителей, ловить сигналы, управлять вводом/выводом в процессы, чистить временный файлы и прочая-прочая..

MKuznetsov ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.