0

我尝试限制 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 似乎有效地限制了脚本中没有的时间

test/dev 系统是 AIX 6.1,但也可以在其他版本以及 sun 和 linux 上运行

4

1 回答 1

1

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

如果您想要一个时间限制,您可能希望调查trap ALRM.

于 2013-11-06T14:26:56.720 回答