我尝试在ksh脚本中限制子进程的允许。我尝试使用ulimit(硬值或软值),但子进程总是打破限制(如果花费的时间超过允许的时间)。
# value for a test
Sc_Timeout=2
Sc_FileOutRun=MyScript.log.Running
Sc_Cmd=./AScriptToRunInSubShell.sh
(
ulimit -Ht ${Sc_Timeout}
ulimit -St ${Sc_Timeout}
time (
${Sc_Cmd} >> ${Sc_FileOutRun} 2>&1
) >> ${Sc_FileOutRun} 2>&1
# some other command not relevant for this
)
结果:
1> ./MyScript.log.Running
ulimit -Ht 2
ulimit -St 2
1>> ./MyScript.log.Running 2>& 1
real 0m11.45s
user 0m3.33s
sys 0m4.12s
我希望系统或用户时间超过0m2.00s
的超时错误当我直接从命令行进行测试时,ulimit Hard似乎有效地限制了不在脚本中的时间
测试系统/ dev是AIX 6.1,但也应该使用其他版本和sun和linux
答案 0 :(得分:1)
每个进程都有自己的时间限制,但time
显示脚本的累计时间。每次创建子进程时,该子进程都有自己的限制。因此,例如,如果您在脚本中调用cut
和grep
,那么这些进程使用自己的CPU时间,配额不会从脚本中减少,尽管限制本身是继承的。
如果您需要时间限制,可以调查trap ALRM
。