【问题标题】:Command `timeout` does not work with Scala - why?命令 `timeout` 不适用于 Scala - 为什么?
【发布时间】:2012-08-11 15:38:09
【问题描述】:

设置: Ubuntu 12.04,32 位;斯卡拉 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调用卡住了?

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

【问题讨论】:

    标签: bash scala timeout


    【解决方案1】:

    尝试包含--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,脚本会按照您的描述挂起。

    【讨论】:

    • 非常感谢,你真的拯救了我的一天。
    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 2021-03-11
    • 1970-01-01
    • 2021-05-26
    • 2016-12-07
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多