2010-02-08 10 views
5

Soy nuevo en bash y Linux. Tengo un programa que he escrito que quiero crear varias instancias simultáneas de.¿Cómo crear un script bash que cree 40 instancias simultáneas de un programa?

En este momento, hago esto mediante la apertura de 10 nuevos terminales, y luego ejecutar el programa 10 veces (el comando corro es php /home/calculatedata.php

¿Cuál es la forma más sencilla de hacer esto utilizando un script bash? también , necesito saber cómo matar los casos, ya que se están ejecutando un bucle infinito

Gracias !!

Respuesta

5

Usted puede utilizar un bucle e iniciar los procesos en el fondo con &:.

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

Si estos procesos son los únicos casos de PHP que se estén ejecutando y que quieren matarlos a todos, lo más fácil es killall:

killall php 
+0

lo que en este caso, el programa es "php"? – chris

+0

@chris: sí, sería php con el nombre del script como parámetro. (Actualicé la respuesta) – sth

+0

¡gracias por la ayuda! – chris

3

¿Qué hay de ejecutar el proceso de php en el fondo:

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

podrá poner fin a todas las instancias de estos antecedentes proceso de PHP se ejecuta mediante la emisión:

killall php 

Asegúrate de que no tienes ningún otro proceso de php en ejecución, ya que también se eliminarán. Si tiene muchos otros procesos PHP, entonces usted hacer algo como:

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

Puede comenzar los casos con un simple lazo y una terminación "&" para ejecutar cada tarea en segundo plano:

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

gracias, ¿hay una manera simple de terminar las instancias del script de una vez? – chris

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

+1 para utilizar la expansión de llave –

0

si usted tiene la SEC (1) programa (lo más probable es que lo tienes), puede hacerlo de una manera un poco más fácil de leer, así:

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

En este caso, la variable n no se utiliza. Esperanza esto ayuda

T

+0

puede usar la expansión de llave para simular seq. {1..40} – ghostdog74

+0

Cuando dije "más legible" quise decir más legibles que los loops de tipo C. El formulario con {1..40} es al menos tan legible, por supuesto. – Tjunier

Cuestiones relacionadas