2012-08-15 22 views
6

Configuración: Ubuntu 12.04, 32 Bit; Scala 2.9.1; Java 1.6.0_24El comando `timeout` no funciona con Scala, ¿por qué?

Descripción:

Mientras que en la línea de comandos bash el comando /usr/bin/timeout 10 scala -version funciona bien, se queda atascado cuando se ejecuta dentro de un script bash.

Ejecución de línea de comandos (duración < 1 segundos):

[email protected]:~$ /usr/bin/timeout 10 scala -version 
Scala code runner version 2.9.1 -- Copyright 2002-2011, LAMP/EPFL 
[email protected]:~$ echo $? 
1 

El mismo comando poner en una escritura del golpe se atascó:

testScript.sh:

#!/bin/bash 
/usr/bin/timeout 10 scala -version 
echo "finished with $?" 

Ejecución testScript.sh (duración 10 segundos):

[email protected]:~/scripts$ ./testScript.sh 
Scala code runner version 2.9.1 -- Copyright 2002-2011, LAMP/EPFL 
finished with 124 
[email protected]:~/scripts$ 

Nota: El problema no aparece con Java (que es utilizado por Scala), parece ser un problema específico de Scala.

Pregunta: ¿Por qué la llamada timeout en el script se atascó?

¿Cómo puedo solucionar esto/¿Qué sería una buena solución?

Respuesta

9

Intente incluir la opción --foreground. De man timeout:

--foreground

Cuando no está funcionando de tiempo de espera directamente desde el intérprete de comandos, permite comando para leer desde el TTY y recibir señales de TTY. En este modo, los hijos de COMMAND no tendrán límite de tiempo.

Usando el siguiente script de prueba:

#!/bin/bash 
/usr/bin/timeout --foreground 10 scala -version 
echo "finished with $?" 

Parece que funciona bien.

$ ./test.sh 
Scala code runner version 2.9.1 -- Copyright 2002-2011, LAMP/EPFL 
finished with 1 

Sin --foreground el guión cuelga como usted ha descrito.

+0

Muchas gracias, realmente salvaste mi día. –

+0

De nada, John. –

Cuestiones relacionadas