2012-08-15 19 views
6

Impostazione: Ubuntu 12.04, 32 bit; Scala 2.9.1; Java 1.6.0_24Il comando `timeout` non funziona con Scala - perché?

Descrizione:

Mentre nella riga di comando bash il comando /usr/bin/timeout 10 scala -version funziona bene, si blocca quando viene eseguito all'interno di uno script bash.

Esecuzione sulla riga di comando (durata < 1 secondi):

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

Lo stesso comando di mettere in uno script bash è rimasto bloccato:

testScript.sh:

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

Esecuzione testScript.sh (durata 10 secondi):

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

Nota: il problema non viene visualizzato con Java (utilizzato da Scala), sembra essere un problema specifico di Scala.

Domanda: Perché la chiamata allo script timeout è bloccata?

Come posso risolvere questo/Quale sarebbe una buona soluzione?

risposta

9

Provare a includere l'opzione --foreground. Da man timeout:

--foreground

Quando disattivato timeout direttamente da una shell, consentono comando di lettura dal TTY e ricevere segnali TTY. In questa modalità, i figli di COMMAND non saranno scaduti.

utilizzando il seguente script di test:

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

Sembra funzionare bene.

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

Senza --foreground lo script si blocca, come hai descritto.

+0

Grazie mille, hai davvero salvato la mia giornata. –

+0

Prego John. –

Problemi correlati