0

別のスレッドでプロセスを実行し、タイムアウト後にハングアップした場合にそれを強制終了するbashスクリプトがあります。すべてが完全に機能しますが、プロセスが入力として「<」または別のファイルに出力するために「>」を必要とする場合、それらはカウントされません。コード:

#!/bin/bash
($1)&
PID=$!
echo "Program '"$1"' started, PID="$PID
i=1
while [ $i -le 600 ]
    do
    ps -p $PID >> /dev/null
    if [ $? -ne 0 ]
      then
      wait $PID
      exit $? #success, return rc of program
    fi
    i=$(($i+1))
    echo "waiting 1 second..."
    sleep 1
done

#program does not want to exit itself, kill it
echo "killing program..."
kill $PID
exit 1 #failed

私はそれをこのように使用します:

safestart.sh './bzip2 -d  sample2.bz2 -k'

そして、すべてが期待どおりですが、私がこのような何かを使用する場合:

safestart.sh './cc_dry2 < dhryinput > results'

'<'または'>'記号は取得されません。すでに「」で試してみました。同じ結果、私はここで完全に迷っています。

4

1 に答える 1

4

解決

問題は次の行です。

($1)&

代わりに次を使用する必要があります。

eval $1 &

問題をよりよく理解するために、次の例も参照してください。

cmd="echo TEST"
$(${cmd})

与えます:

テスト: コマンドが見つかりません

cmd="echo TEST"
eval ${cmd}

与えます:

テスト

于 2013-03-07T11:52:40.340 に答える