【发布时间】:2011-01-14 15:24:46
【问题描述】:
我有一个 Perl 脚本,它执行各种安装步骤来为我们公司设置一个开发盒。它运行各种 shell 脚本,其中一些由于低于所需的ulimits(具体而言,在我的情况下是堆栈大小-s)而崩溃。
因此,我想设置一个ulimit,它适用于从我的主要 Perl 脚本开始的所有脚本 (children),但我不确定如何实现 - 任何尝试从在脚本中仅将其设置在该特定子 shell 上,该子 shell 会立即退出。
我知道我可以在运行 Perl 脚本之前调用 ulimit 或使用 /etc/security/limits.conf 但我不希望用户知道这些 - 他们应该只知道如何运行脚本,这应该为他们处理所有这些。
我也可以在每次运行命令时运行ulimit,例如ulimit -s BLA; ./cmd,但我不想每次都重复这个,我觉得那里有更好、更清洁的解决方案。
另一个疯狂的“解决方法”是制作一个名为 BLA.sh 的包装脚本,该脚本将设置 ulimit 并调用 BLA.pl,但同样,我认为这是一个 hack,现在我有 2 个脚本(我什至可以制作BLA.pl 用 "ulimit -s BLA; ./BLA.pl --foo" 调用自己,并根据它是否看到 --foo 采取不同的行动,但这比以前更骇人听闻)。
最后,显然我可以安装 BSD::Resource 但我想避免使用外部依赖项。
那么在 Perl 脚本中设置 ulimit 并使其应用于所有子级的 THE 方法是什么?
谢谢。
【问题讨论】:
-
只使用 BSD::Resource。或者,编译你自己的 XS 模块来做同样的事情。不过不知道你为什么要这么做。