Tengo varias simulaciones que hacer, cada una de ellas se invoca python simulate.py <parameter list>
. El problema con estas simulaciones es que algunas de ellas se cuelgan sin salir, lo que me impide ejecutarlas por lotes con un script simple.
Lo que necesitaría, es alguna forma de comando de "restricción de tiempo de ejecución", que mataría automáticamente el proceso (preferiblemente presionando virtualmente Ctrl + C , pero creo que la simple matanza también funcionará) después de un tiempo específico, si El proceso no terminó con gracia por sí mismo.
Por supuesto que puedo escribir tales guión a mí mismo, pero sospecho que alguien lo ha hecho antes que yo, así que no tengo que reinventar la rueda de pasar horas con el ps
, time
y los manuales de bash.
fuente
myProgram
termina en menos tiempo quesleep
(no es una suposición irracional ya que el objetivo es establecer un tiempo de ejecución máximo permitido). Luego envía una señal a un PID inexistente (sin daño real) o a cualquier proceso aleatorio en el sistema (potencialmente fatal).timeout
comando hace exactamente lo que está buscando, esperando que el OP responda a mis comentarios.timeout
debería ser la solución que necesito. Lo estoy probando en este momentoHe encontrado algo un poco mejor, que
timeout
:timelimit
.Tiene varias ventajas; uno es que el usuario puede abortar manualmente la ejecución presionando "Ctrl + C".
El
timelimit
programa está disponible en el repositorio de Debian.fuente
Puede ajustar el tiempo de CPU y otras cosas con
ulimit
, especialmente para el tiempo de CPU:fuente
Bash usa una variable llamada
$BASHPID
que se puede usar en tal situación, por ejemplo:Puede cambiar el argumento en la llamada a
sleep
indo_face()
en100
lugar de10
y ver qué sucede cuando el niño tarda demasiado en hacer sus tareas. Simplemente cambie la llamada para dormir endo_face()
una llamada a su ejecutable y si tarda demasiado, la secuencia de comandos la matará,20
en este ejemplo , segundos es el valor límite. Los parámetros se pueden implementar para que esto se convierta en un script simple para llamar y pueda ser llamado por otro script en lote o lo que sea. El manejo de los archivos pid para cada proceso concurrente es un problema que deberá ser manejado, quizás use diferentes subdirectorios ...NB: en GNU Linux
sleep
puede tomar argumentos de coma flotante, comosleep 0.1
dormir durante una décima de segundo.fuente