Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 6 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mié Ene 11, 2012 10:16 am
Mensajes: 3

Nota Publicado: Mié Ene 11, 2012 10:47 am 
Arriba  
Hola, soy nuevo en el foro y necesito un poco de ayuda para escribir un shell script.
Simplemente quiero hacer un script que ejecute un programa 10 veces casi de forma simultanea ( solo con un sleep 0.1 entre programa y programa) pero quiero que cada vez que uno de los diez programas finaliza, inmediatamente se empiece a ejecutar otro de forma que siempre haya diez programas ejecutandose. Por supuesto este proceso terminara cuando se cumpla una determinada condicion.
Alguien tiene alguna idea de como podria hacerce dicho script??

Hasta ahora lo hacia con:

a=1
while [ $a -le 10 ]
do
nice -n 5 ./montecarlo170 &
sleep 0.1
a=`expr $a + 1`
done

pero claro esto no me sirve porque tengo que ejecutar otra vez el script cuando haya terminado el anterior
montecarlo170 es el programa que quiero ejecutar.

Gracias de antemano!!!

Saludos!!

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mié Ene 11, 2012 4:00 pm 
Arriba  
Espero que sepas corregir lo que falle (que seguro que falla):
Código:
#!/bin/bash
function launch_montecarlo(){
  nprograms=`ps -C montecarlo | wc -l`    #debería salir el número de veces que el programa llamado "montecarlo" se está ejecutando + 1
  if (( $nprograms >= 11 )) ; then
    return -1
  else
    ./montecarlo &
  fi
  return 0
}

seg=`date +%S`
while (( $seg < 50 ))    #por poner alguna condición de finalización
do
  launch_montecarlo
  if (( $? = -1 )) ; then   #si el resultado devuelto por la función es -1 ya hay 10 programas ejecutándose -> esperamos
    sleep 2
  fi
done

Comprueba que la sintaxis sea la correcta especialmente en las condiciones, y comprueba que el "ps -C" funciona de acuerdo a lo que se espera

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mié Ene 11, 2012 10:16 am
Mensajes: 3

Nota Publicado: Jue Ene 12, 2012 4:17 am 
Arriba  
Muchas gracias por responder akodo.

No he conseguido arreglar el script para que no me de fallos, he probado de mil maneras y nada, me dice que hay un parentesis inesperado detras de launch_montecarlo, y he probado quitar los parentesis y me dice function: not found. Tambien he probado quitar la palabra function y me dice Cannot Open 50: no such file.

Al final he probado de otra manera un poco chapucera pero que me funciona, y es la siguiente:
Hago un script que lance 10 veces otro script. Este ultimo lo que hace es que lanza el programa montecarlo un determinado numero de veces pero por orden, es decir, que hasta que no termina uno no empieza otro (simplemente le pongo un wait al final ) y con esto siempre hay 10 montecarlo ejecutandose a la vez.

Aunque me ha resultado muy interesante el script que propones tu, siempre se aprenden cosas nuevas :)

Gracias.

 Perfil Email  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Jue Ene 12, 2012 6:49 am 
Arriba  
solucion limpia:
a=1
Código:
while [ $a -le 10 ]; do
    while  [ true ] ; do
          ejecutar montecarlo ## traduce tu, ok??
    done
    sleep 0,1s
    a=$((a+1))
done


eso lanza 10 instancias, cada 0.1 s. cada una de ellas, volvera a lanzar el programa en cuanto este finalice.

:)

_________________
#446716

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Jue Ene 12, 2012 4:01 pm 
Arriba  
niky45 escribió:
solucion limpia:
a=1
Código:
while [ $a -le 10 ]; do
    while  [ true ] ; do
          ejecutar montecarlo ## traduce tu, ok??
    done
    sleep 0,1s
    a=$((a+1))
done


eso lanza 10 instancias, cada 0.1 s. cada una de ellas, volvera a lanzar el programa en cuanto este finalice.

:)

¿El "while [ true ]" no se metería en un bucle infinito siempre?

Corrijo un par de cosas que he checkeado:
Código:
function launch_montecarlo {
  ....
}

nótese que se quitan los paréntesis y se sustituyen por un espacio.

Lo del "cannot open: 50" es porque te esta considerando el "(( $seg < 50 ))" como que estás abriendo el fichero "50" (que no existe). Debería funcionar, pero si no es así sustituyes la línea del while por:
Código:
while [[ $seg -lt 50 ]]

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mié Ene 11, 2012 10:16 am
Mensajes: 3

Nota Publicado: Vie Ene 13, 2012 3:23 am 
Arriba  
Hola de nuevo.

Ese codigo (Niky42) es mas o menos el que he utilizado yo pero con otras condiciones, pero claro para que hayan a la vez 10 programas montecarlo ejecutandose hay que lanzar ese script 10 veces, por eso utilice otro script para lanzar ese script 10 veces :)

Akodo el codigo me sigue dando errores, eso que dices lo probe la otra vez y nada, no se que puede ser lo que esta causando los errores.

 Perfil Email  
Mostrar mensajes previos:  Ordenar por  
 [ 6 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO