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, timey los manuales de bash.
fuente

myProgramtermina 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).timeoutcomando hace exactamente lo que está buscando, esperando que el OP responda a mis comentarios.timeoutdeberí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
timelimitprograma 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
$BASHPIDque se puede usar en tal situación, por ejemplo:Puede cambiar el argumento en la llamada a
sleepindo_face()en100lugar de10y 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á,20en 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
sleeppuede tomar argumentos de coma flotante, comosleep 0.1dormir durante una décima de segundo.fuente