Как сделать bash-скрипт, который создает 40 одновременных экземпляров программы? - PullRequest
7 голосов
/ 08 февраля 2010

Я новичок в bash и Linux. У меня есть программа, которую я написал, и я хочу создать несколько одновременных экземпляров.

Сейчас я делаю это, открывая 10 новых терминалов, а затем запускаю программу 10 раз (команда, которую я запускаю, php /home/calculatedata.php

Какой самый простой способ сделать это, используя скрипт bash? Кроме того, мне нужно знать, как убивать экземпляры, потому что они выполняют бесконечный цикл.

Спасибо !!

Ответы [ 6 ]

7 голосов
/ 08 февраля 2010

Вы можете использовать цикл и запускать процессы в фоновом режиме с помощью &:

for (( i=0; i<40; i++ )); do
   php /home/calculatedata.php &
done

Если эти процессы являются единственными экземплярами PHP, которые вы используете, и вы хотите уничтожить их все, самый простой способ - killall:

killall php
5 голосов
/ 08 февраля 2010
for instance in {1..40}
do
  php myscript &
done
4 голосов
/ 08 февраля 2010

Как насчет запуска процесса php в фоновом режиме:

#!/bin/bash
for ((i=1;i<=40;i+=1)); do
  php /home/calculatedata.php &
done

Вы можете завершить все экземпляры этих фоновых запущенных процессов PHP, введя:

killall php

Убедитесь, что у вас не запущены другие процессы php, так как они тоже будут убиты. Если у вас много других процессов PHP, то вы делаете что-то вроде:

ps -ef | grep /home/calculatedata.php | cut_the_pid | kill -9
1 голос
/ 08 февраля 2010

если у вас есть программа seq(1) (есть вероятность, что она у вас есть), вы можете сделать это немного более читабельным образом, например:

for n in $(seq 40); do
   mycmd &
done

В этом случае переменная n не используется. Надеюсь, это поможет.

1 голос
/ 08 февраля 2010

Вы можете запустить экземпляры с помощью простого цикла и завершающего символа «&» для запуска каждого задания в фоновом режиме:

INSTANCES=40
for ((i=0; $i<$INSTANCES; ++i))
do
    mycmd &
done
0 голосов
/ 27 февраля 2019

Этот скрипт представляет собой цикл, который создает экземпляры переменной while true; делать: 'цикл. Он продолжает выполнять задания, пока не будет отменен, и все задания выполняются в фоновом режиме. Вы можете добавить переменные для счетчика индекса и изменить: в свой код.

while true; do while true; do :; done & done

до остановки:

killall bash

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...