命令`timeout`不适用于Scala - 为什么?

时间:2012-08-15 10:22:23

标签: bash scala timeout

设置: Ubuntu 12.04,32位; Scala 2.9.1; Java 1.6.0_24

说明:

在bash命令行中,命令/usr/bin/timeout 10 scala -version工作正常,在bash脚本中执行时会卡住。

在命令行执行(持续时间< 1秒):

user@ubuntu:~$ /usr/bin/timeout 10 scala -version
Scala code runner version 2.9.1 -- Copyright 2002-2011, LAMP/EPFL
user@ubuntu:~$ echo $?
1

放入bash脚本的命令卡住了:

testScript.sh

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

执行testScript.sh(持续时间10秒):

user@ubuntu:~/scripts$ ./testScript.sh
Scala code runner version 2.9.1 -- Copyright 2002-2011, LAMP/EPFL
finished with 124
user@ubuntu:~/scripts$ 

注意:问题不会出现在Java(Scala使用的)上,它似乎是Scala特定的问题。

问题:为什么脚本中的timeout调用卡住了?

我该如何解决这个/什么是一个好的解决方法?

1 个答案:

答案 0 :(得分:9)

尝试添加--foreground选项。来自man timeout

  

- 前景

     
    

如果没有直接从shell提示符运行超时,请允许COMMAND从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,脚本将按照您的描述挂起。