2014-01-24 2 views
5

Предположим, что я бегу N рабочих мест со следующей Gnu параллельной команды:Как остановить gnu параллельные задания, когда какой-либо из них завершается?

seq $N | parallel -j 0 --progress ./job.sh 

Как я могу вызвать параллельно, чтобы убить все запущенные рабочие места и не принимать не более, как только какой-либо один из них выходит?

ответ

2

Вы можете использовать --halt:

seq $N | parallel -j 0 --halt 2 './job.sh; exit 1' 

Небольшая проблема с этим решением является то, что вы не можете сказать, если job.sh не удалось.

+0

В новых версиях GNU Parallel вы можете использовать '-halt now, success = 1' Он выйдет, когда задание удастся и убьет рабочие задания. –

0

Вы также можете использовать killall perl. Это неточно, но легко запомнить