命令“超时”不适用于 Scala - 为什么



>Setup: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调用卡住了?

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

尝试包含--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脚本将如您所描述的那样挂起。

相关内容

  • 没有找到相关文章

最新更新