Я ищу простой способ запустить N
выбранные процессы одновременно с помощью одной команды. Он должен поместить весь вывод на мой терминал и закрыть их все, когда я выйду с ctrl+c
. Есть ли какое-нибудь существующее приложение для этого?
Я думаю о чем-то вроде exec_many 10 foo
- должно быть 10 foo
s работает и возрождает всех, кто умирает.
Я не знаю ни одного другого, но вы могли бы сделать это с помощью Bash без особых усилий. Я бы поместил каждый из процессов foo в группу процессов. Затем вы можете перехватить SIGINT в родительском элементе и убить группу процессов с помощью kill -pgid
(Отрицательный перед номером группы процесса). Вы также можете запустить их все как рабочие места. Так что все они работают одновременно (в значительной степени). Наконец, вы можете зацикливаться на выводе заданий каждые x секунд (засыпать в цикле) и получать счет, если счетчик меньше, чем количество процессов foo, чем вы можете запустить еще один (можно было бы сделать более интересным, сделав убедитесь, что никто не остановлен и т. д.).
Примерная версия может выглядеть примерно так:
#!/bin/bash
command=$1
n_job=$2
function kill_jobs {
echo traped
for job in $(jobs -p); do
echo killing $job
kill $job
done
}
trap 'kill_jobs; exit' SIGINT
while true; do
current_jobs=$(jobs -pr)
x=0;
for job in $current_jobs; do
(( x++ ))
done;
jobs_to_run=$(($n_job - $x))
for (( y = 0; y < $jobs_to_run; y++ )); do
$command &
done
x=0
sleep 5
done
Вы также можете найти подобные вещи в разделе «Процессы и параллелизм» Pythton для системного администрирования Unix и Linux.
Из синаптических ....
создавать и выполнять командные строки из стандартного ввода параллельно
GNU Parallel - это оболочка для параллельного выполнения заданий на одной или нескольких машинах. Задание обычно представляет собой отдельную команду или небольшой сценарий, который нужно запускать для каждой строки ввода. Типичный ввод - это список файлов, список хостов, список пользователей или список таблиц.
Если вы используете xargs сегодня, вы найдете GNU Parallel очень простым в использовании. Если вы пишете циклы в оболочке, вы обнаружите, что GNU Parallel может заменить большинство циклов и ускорить их выполнение за счет параллельного выполнения заданий. Если вы используете ppss или pexec, вы обнаружите, что GNU Parallel часто упрощает чтение команды.
GNU Parallel также гарантирует, что выходные данные команд будут такими же, как если бы вы выполняли команды последовательно. Это позволяет использовать вывод GNU Parallel в качестве ввода для других программ.