2012-08-15 17 views
6

Setup: Ubuntu 12.04, 32 Bit; Scala 2.9.1; 1.6.0_24 JavaBefehl `Timeout` funktioniert nicht mit Scala - warum?

Beschreibung:

Während auf der bash-Befehlszeile den Befehl /usr/bin/timeout 10 scala -version funktioniert gut, es klemmt, wenn innerhalb eines Bash-Skript ausgeführt.

Ausführen auf der Kommandozeile (Dauer < 1 Sekunden):

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

Der gleiche Befehl in einem Bash-Skript setzen stecken geblieben:

testScript.sh:

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

testScript.sh Ausführen (Dauer 10 Sekunden):

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

Hinweis: Das Problem tritt nicht mit Java auf (das von Scala verwendet wird), es scheint ein Scala-spezifisches Problem zu sein.

Frage: Warum hat die timeout Aufruf im Skript stecken geblieben?

Wie kann ich das beheben/Was wäre eine gute Problemumgehung?

Antwort

9

Versuchen Sie, die Option --foreground zu verwenden. Von man timeout:

--foreground

Wenn nicht Timeout direkt von einem Shell-Prompt ausgeführt wird, erlauben COMMAND vom TTY und empfangen TTY Signale zu lesen. In diesem Modus wird für Kinder von COMMAND kein Zeitlimit überschritten.

Verwendung des folgenden Testskript:

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

Es scheint gut zu funktionieren.

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

Ohne --foreground das Skript hängt wie Sie beschrieben haben.

+0

Vielen Dank, Sie haben wirklich meinen Tag gerettet. –

+0

Gern geschehen, John. –