2010-02-08 2 views
5

Ich bin neu zu bash und Linux. Ich habe ein Programm, das ich geschrieben habe, dass ich mehrere gleichzeitige Instanzen von erstellen möchte.Wie erstellt man ein Bash-Skript, das 40 gleichzeitige Instanzen eines Programms erstellt?

Gerade jetzt, ich dies tun, indem 10 neue Terminals zu öffnen, und dann läuft das Programm 10-mal (der Befehl, den ich laufen ist php /home/calculatedata.php

Was ist der einfachste Weg ist dies mit einem Bash-Skript zu tun? auch , muß ich wissen, wie die Instanzen zu töten, weil sie in eine Endlosschleife läuft

Dank !!

Antwort

5

Sie eine Schleife verwenden können und die Prozesse im Hintergrund mit & beginnen.

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

Wenn diese Prozesse die einzigen Instanzen von PHP sind Sie laufen und Sie wollen, dass sie alle töten, ist der einfachste Weg killall:

killall php 
+0

so in diesem Fall ist das Programm "php"? – chris

+0

@chris: Ja, es wäre PHP mit dem Skriptnamen als Parameter. (Ich aktualisierte er Antwort) – sth

+0

danke für die Hilfe! – chris

3

Wie über den PHP-Prozess im Hintergrund ausgeführt wird:

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

Sie können durch die Ausgabe alle Instanzen dieser Hintergrund laufen PHP-Prozess beenden:

killall php 

Stellen Sie sicher, dass keine anderen PHP-Prozesse ausgeführt werden, da diese ebenfalls beendet werden. Wenn Sie viele anderen PHP-Prozesse haben, dann tun Sie so etwas wie:

ps -ef | grep /home/calculatedata.php | cut_the_pid | kill -9 
1

Sie die Instanzen mit einer einfachen Schleife beginnen und einen Abschluss „&“ jeden Job im Hintergrund laufen zu lassen:

INSTANCES=40 
for ((i=0; $i<$INSTANCES; ++i)) 
do 
    mycmd & 
done 
+0

danke, gibt es eine einfache Möglichkeit, die Instanzen des Skripts auf einmal zu beenden? – chris

2
for instance in {1..40} 
do 
    php myscript & 
done 
+2

+1 für die Verwendung der Klammerextension –

0

, wenn Sie die seq (1) Programm haben (die Chancen sind Sie es haben), können Sie es in einer leicht lesbarer Weise tun, wie folgt aus:

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

In diesem Fall wird die Variable n nicht verwendet. this helps

T

+0

Sie können die Klammerextension verwenden, um seq zu simulieren. {1..40} – ghostdog74

+0

Als ich "lesbarer" sagte, meinte ich lesbarer als die C-ähnlichen for-Schleifen. Die Form mit {1..40} ist natürlich mindestens so gut lesbar. – Tjunier

Verwandte Themen