I have в command, let say php process.php
. I want to run 1000 instance of this command to тест похвалите caused on the server. How хан I do this?
Things to заметил:
Ctrl+C should закончись all instance at одиннадцать
It is going to run on в single core processor so не need of advance feature like multi-threading.
Nice to шоу current number of running instance on top
Конечный Commands should output in the same
Commands requires не неудар в лунку
Можно записать Основную программу для запуска 1000 раз php process.php
. Используя fork
и exec
может быть удобным, если Вы используете C. Когда Ведущее устройство запускает новое php
процесс, он также записывает pid
.
Шоу текущее количество рабочего экземпляра: Ведущее устройство может контролировать состояние подпроцессов.
Ctrl+C должен завершить весь экземпляр сразу: Ведущее устройство получает сигнал Ctrl+C, и уничтожает все подпроцессы (kill(pid, SIGKILL);
) или уведомляет их для выхода.
Вы могли использовать сценарий. Сохраните следующее как run-parallel.sh
, и сделайте это исполняемым файлом (chmod +x run-parallel.sh
):
#! /bin/bash
trap "pkill -P $$; kill -INT $$" INT
while read n
do
"$@" &
done < <(seq 1000)
wait
Объяснение:
trap ... INT
устанавливает команду, которая будет выполнена когда SIGINT
сигнал получен (который является сигналом, сгенерированным, когда Вы нажимаете CtrlC). $$
PID текущего процесса (то есть, самого сценария). pkill -P $$
уничтожает те процессы чей родительский процесс i сценарий.SIGINT
уничтожьте себя использование SIGINT
после того как это убралось. Следовательно, kill -INT $$
.seq 1000
генерирует числа от 1 до 1 000.while
цикл выполняет команду, обеспеченную как аргументы сценарию однажды для каждого числа от seq
, и отправляет их в фон.wait
пока все фоновые процессы не заканчивают выполняться.Выполните его таким образом:
./run-parallel.sh php process.php
Можно использовать xargs
. Просто распечатайте название процесса, который Вы хотите 100 раз и передаете его xargs
:
perl -e 'print "/path/to/process.php\n" x 100' | xargs -P 100 -I {} php {}
Команда Perl просто печатает /path/to/process.php
сопровождаемый новой строкой 100 раз. Это затем передается xargs
которому говорят запустить до 100 параллельных команд (-P 100
). -I {}
говорит xargs
заменять строку {}
с его входом. Поэтому php {}
расширен до php /path/to/process.php
. Так как все сделано xargs
, единственный Ctrl+C уничтожит всех их, и весь вывод печатается к тому же терминалу.