Tengo un programa de bucle infinito mal codificado que quiero ejecutar en la línea de comandos, pero no para siempre. Quiero usar ulimit para que, si se repite para siempre, se corte.
Lo estoy intentando:
$> bash -c "ulimit -t 1; java myinfloopprogram"
pero es como si no pasara nada. ¿Qué está pasando? ¿Mi comando de línea de comando es incorrecto? myinfloopprogram funciona bien.
Estoy ejecutando una terminal y la versión es Ubuntu 9.10.
Respuesta1
¿El programa de bucle realmente utiliza CPU?
-t es para el tiempo de CPU, no para el tiempo de reloj de pared, por lo que si su programa en realidad no usa tiempo de CPU, no se eliminará.
Respuesta2
Tal vez intente algo como esto en su lugar:
java myinfloopprogram &
pid=$!
for i in $(seq 1 60); do
kill -0 $pid >/dev/null || break
sleep 1
done
kill -0 $pid >/dev/null || kill -TERM $pid
Respuesta3
ulimit
Probablemente no sea lo que necesitas. Necesita algún tipo de función de tiempo de espera de bash. No hay nada integrado en bash, pero hay algunos scripts disponibles para hacer esto. p.ejhttps://stackoverflow.com/questions/687948/timeout-a-command-in-bash- without-unnecessary-delay