62
задан 26 November 2012 в 16:00

6 ответов

Этот сценарий удара для потоков параллели N. Каждым аргументом является команда.

trap уничтожит все подпроцессы, когда SIGINT будет пойман.
wait $PID_LIST ожидает каждый процесс для завершения. Когда все процессы завершились, выходы программы.

#!/bin/bash

for cmd in "$@"; do {
  echo "Process \"$cmd\" started";
  $cmd & pid=$!
  PID_LIST+=" $pid";
} done

trap "kill $PID_LIST" SIGINT

echo "Parallel processes have started";

wait $PID_LIST

echo
echo "All processes have completed";

Сохраняют этот сценарий как parallel_commands и делают это исполняемым файлом.
Это - то, как использовать этот сценарий:

parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"

Пример:

parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"

Запускаются, 4 параллели спят, и ожидает до "сна 4" конца.

102
ответ дан 31 October 2019 в 13:13

На основе комментария @alessandro-pezzato. Выполненные кратные числа управляют при помощи & между командами.

Пример:

$ sleep 3 & sleep 5 & sleep 2 &

Это, выполнит команды в фоне.

63
ответ дан 31 October 2019 в 13:13

Использование Параллель GNU:

(echo command1; echo command2) | parallel
parallel ::: command1 command2

Для уничтожения:

parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID
31
ответ дан 31 October 2019 в 13:13

Это может быть сделано с простым Make-файлом:

sleep%:
        sleep $(subst sleep,,$@)
        @echo $@ done.

опция Use -j.

$ make -j sleep3 sleep2 sleep1
sleep 3
sleep 2
sleep 1
sleep1 done.
sleep2 done.
sleep3 done.

опция Without -j это выполняется в сериале.

$ make -j sleep3 sleep2 sleep1
sleep 3
sleep3 done.
sleep 2
sleep2 done.
sleep 1
sleep1 done.

можно также сделать пробный прогон с '-n' опция.

$ make -j -n sleep3 sleep2 sleep1
sleep 3
sleep 2
sleep 1
2
ответ дан 31 October 2019 в 13:13

Я предлагаю намного более простую утилиту, которую я просто записал. Это в настоящее время называло паритет, но будет скоро переименовано или к parl или к pll, еще не решили.

https://github.com/k-bx/par

API так же прост как:

par "script1.sh" "script2.sh" "script3.sh"

команды Добавления префикса могут быть сделаны через:

par "PARPREFIX=[script1] script1.sh" "script2.sh" "script3.sh"
1
ответ дан 31 October 2019 в 13:13

Для выполнения нескольких команд просто добавляют && между двумя командами как это: command1 && command2

И если Вы хотите выполнить их в двух различных терминалах затем, Вы делаете это как это:

gnome-terminal -e "command1" && gnome-terminal -e "command2"

Это откроет 2 терминала с command1 и command2 выполнение в них.

Hope это помогает Вам.

-11
ответ дан 31 October 2019 в 13:13

Другие вопросы по тегам:

Похожие вопросы: