Как я могу остановить параллельные задания gnu, когда любое из них завершается?

Предположим, я запускаю N заданий с помощью следующей команды gnu parallel:

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

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


person Ant Man    schedule 24.01.2014    source источник


Ответы (2)


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

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

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

person Ole Tange    schedule 24.01.2014
comment
В более новых версиях GNU Parallel вы можете использовать --halt now,success=1. Он завершится, когда задание завершится успешно, и уничтожит запущенные задания. - person Ole Tange; 14.10.2015

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

person yanpas    schedule 22.12.2015