如何限制脚本在ksh脚本中作为子进程运行的允许时间

时间:2013-11-06 10:08:13

标签: ksh ulimit

我尝试在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

1 个答案:

答案 0 :(得分:1)

每个进程都有自己的时间限制,但time显示脚本的累计时间。每次创建子进程时,该子进程都有自己的限制。因此,例如,如果您在脚本中调用cutgrep,那么这些进程使用自己的CPU时间,配额不会从脚本中减少,尽管限制本身是继承的。

如果您需要时间限制,可以调查trap ALRM