我的操作系统是 AIX (7.2),我的 shell 是 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
这或多或少的作品但遗憾的是,无论脚本被计时器终止还是“定期”退出,脚本退出后都会定期留下进程。不知何故,我对 shell 进程管理的理解似乎有所偏差。我必须做什么才能在脚本退出后清除所有“残留物”?
答案1
可以使用超时命令
timeout DURATION COMMAND [ARG]...
其中DURTATION
是您的超时持续时间,COMMAND
和ARG
是您的脚本及其参数。
例如
/usr/bin/time timeout 5 sleep 10
节目
0.00user 0.00system 0:05.01elapsed
这意味着“睡眠10”实际上在5秒后就终止了。