0votos

Ejecutar y monitorizar ejecución de un proceso durante un tiempo t en Shell

por josejuan hace 6 años

Se usa un archivo temporal como semáforo para sincronizar los dos procesos.

Crear un script o programa que llamaremos guardián que reciba como parámetros el tiempo de ejecución necesario y el proceso o programa que debe ejecutar. Guardián deberá asegurarse de que el programa/proceso que recibe como parámetro se ejecuta exactamente durante el tiempo recibido en el otro parámetro. Ejemplo: guardian 00:00:15 mi_programa Esto quiere decir, que guardián lanzará el programa mi_programa, lo ejecutará, y vigilará que esté en ejecución durante 15segundos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo 1 > $s; while [ -f $s ] ; do $j & p=$!; (sleep $t; rm $s; kill -9 $p) & q=$!; wait $p ; [ -f $s ] && kill -9 $q; done 
 
# $s, es la ruta del archivo temporal a usar eg. /home/pepe/tmp/semaforo 
# $j, es el trabajo a realizar eg. /home/pepe/scripts/job 
# $t, es el tiempo máximo que el proceso debe estar ejecutándose de forma ininterrumpida 
 
# La idea es: 
 
se crea el semáforo indicando que no se ha conseguido el objetivo. 
se lanza el trabajo en background 
se lanza un proceso que espera el tiempo máximo y en ese caso mata al proceso y al semáforo 
esperamos a que termine o se interrumpa el trabajo 
si sigue existiendo el semáforo, es porque ha terminado muy pronto, matamos el sleep y repetimos 
si no existe el semáforo, es porque el sleep terminó y mato a ambos, objetivo cumplido 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.