私のオペレーティングシステムは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
タイムアウト期間はどこにあり、スクリプトとそのパラメータは何ですかCOMMAND
?ARG
例えば
/usr/bin/time timeout 5 sleep 10
プログラム
0.00user 0.00system 0:05.01elapsed
これは、「スリープ10」が実際に5秒後に終了することを意味します。