6

セットアップ: Ubuntu 12.04、32 ビット。スカラ 2.9.1; Java 1.6.0_24

説明:

bash コマンド ラインではコマンド/usr/bin/timeout 10 scala -versionは正常に動作しますが、bash スクリプト内で実行するとスタックします。

コマンドラインで実行中 (duration< 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スクリプト内の呼び出しがスタックしたのはなぜですか?

これを修正するにはどうすればよいですか / 良い回避策は何ですか?

4

1 に答える 1

9

--foregroundオプションを含めてみてください。からman timeout:

- 前景

シェル プロンプトからタイムアウトを直接実行しない場合は、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あなたが説明したように、スクリプトがないとハングします。

于 2012-08-15T11:57:47.377 に答える