编写具有预定义超时的 ksh 脚本

编写具有预定义超时的 ksh 脚本

我的操作系统是 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是您的超时持续时间,COMMANDARG是您的脚本及其参数。

例如

/usr/bin/time timeout 5 sleep 10 

节目

0.00user 0.00system 0:05.01elapsed

这意味着“睡眠10”实际上在5秒后就终止了。

相关内容