2012-08-15 21 views
6

設置: Ubuntu 12.04,32位;斯卡拉2.9.1;的Java 1.6.0_24命令`超時`不適用於Scala - 爲什麼?

說明:

雖然bash命令行/usr/bin/timeout 10 scala -version正常工作的命令上,當bash腳本中執行它卡住。

執行命令行(持續時間< 1秒):

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

非常相同的命令放在一個bash腳本卡住了:

testScript.sh

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

執行testScript.sh(持續時間10秒):

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

注意:該問題沒有出現Java(Scala使用),它似乎是一個Scala特定的問題。

問題:爲什麼腳本中的timeout調用卡住了?

我該如何解決這個/什麼是一個很好的解決方法?

回答

9

試試包括--foreground選項。從man timeout

--foreground

當不能直接從shell提示運行超時,允許命令從TTY讀取和接收TTY信號。在這種模式下,COMMAND的孩子不會超時。

使用下面的測試腳本:

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

這似乎很好地工作。

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

如果沒有--foreground,腳本就像您所描述的那樣掛起。

+0

非常感謝你,你真的救了我的一天。 – 2012-08-15 13:19:08

+0

不客氣的約翰。 – 2012-08-15 13:19:37

相關問題