1

次のコードを含む bash-script があるとします。

function test() {
  some_code
  ...
  make
  some_code
}

test
some_other_code

test()には、不当に長く実行される可能性のあるコードが含まれる可能性があります。

私は次のようなものを使用しようとしていました:

function test() {
  cd $WORK_FOLDER
  make
}

run_timeout()
{
local timeout=$1
$2 &
local pid=$!
while ps $pid >/dev/null && [ $timeout -ne 0 ]; do
  sleep 1
  let timeout--  
done  
kill -9 $pid 2>/dev/null && echo "Process $pid killed because executed too long"
}

run_timeout 15 "test"
run_timeout 5 "test"

しかし、推定時間後もmakeは実行されていました。

この問題を解決する方法はありますか?

bash スクリプトがハングしないようにするテクニックはありますか?

4

1 に答える 1

0

$2 & は、長い関数を実行する場所だと思いますよね? 私は同じ問題を抱えていましたが、関数の内容に応じて、複数のプロセスが発生します...私の解決策が最善の方法であるかどうかはわかりませんが、うまくいきました。

変化する :

$2 &

為に :

awk '{system($2)}' &

このように、 pid =$! awk pid を提供し、awk を強制終了することで、プロセス全体を強制終了します。

于 2013-06-14T14:24:55.050 に答える