事前定義されたタイムアウトを使用したkshスクリプトの作成

事前定義されたタイムアウトを使用したkshスクリプトの作成

私のオペレーティングシステムはAIX(7.2)で、シェルはksh88(可能であれば)またはksh93(必要な場合)です。

実行のための最大タイマーを設定するスクリプトを作成したいと思います。この制限時間内にジョブを完了すると正常に終了する必要がありますが、このタイマーがオフになった場合は、ジョブが完了したかどうかにかかわらずすぐに停止する必要があります。

私の無邪気な実装は次のとおりです。

#! /bin/ksh

function pTimer
{
typeset -i iProcID=$1                            # process ID of main process

sleep $CiMaxTime

print -u2 - "TIMER: time is up, aborting $0"     # terminate if time is up
kill -15 $iProc

exit 1
}


# main()
typeset -i iProc=$$
typeset -i CiMaxTime=60                          # maximum time in seconds

pTimer $iProc &

# ... actual work done here.
exit 0

これ多少の作品しかし、残念ながら、スクリプトがタイマーによって終了したり「定期的に」終了したりしても、プロセスはスクリプトの終了後に定期的に遅れます。どういうわけかシェルプロセス管理の私の理解が不足しているようです。スクリプトが終了した後にすべての「残りの食べ物」をクリーンアップするにはどうすればよいですか?

ベストアンサー1

timeout コマンドを使用できます

timeout DURATION COMMAND [ARG]...

DURTATIONタイムアウト期間はどこにあり、スクリプトとそのパラメータは何ですかCOMMANDARG

例えば

/usr/bin/time timeout 5 sleep 10 

プログラム

0.00user 0.00system 0:05.01elapsed

これは、「スリープ10」が実際に5秒後に終了することを意味します。

おすすめ記事