我有一个 Perl 脚本,可以执行各种安装步骤来为我们公司设置开发盒。它运行各种shell脚本,其中一些脚本由于低于要求而崩溃ulimit
s(具体来说,堆栈大小-s
就我而言)。
因此,我想设置一个ulimit
这将适用于所有脚本(children
)从我的主 Perl 中开始,但我不确定如何实现这一点 - 任何从脚本中调用 ulimit 的尝试都只会将其设置在特定的子 shell 上,该子 shell 会立即退出。
我知道我可以打电话ulimit
在运行 Perl 脚本或使用之前/etc/security/limits.conf
但我不希望用户知道任何这些 - 他们应该只知道如何运行脚本,脚本应该为他们处理所有这些事情。
我也可以跑ulimit
每次我运行命令时,就像这样ulimit -s BLA; ./cmd
但我不想每次都重复这个,我觉得有更好、更干净的解决方案。
另一个疯狂的“解决方法”是制作一个名为 BLA.sh 的包装脚本,它将设置 ulimit 并调用 BLA.pl,但同样,这在我看来是一个黑客,现在我有 2 个脚本(我什至可以制作 BLA.pl使用“ulimit -s BLA; ./BLA.pl --foo”调用自身,并根据是否看到 --foo 采取不同的行为,但这比以前更黑客)。
最后,显然我可以安装 BSD::Resource 但我想避免使用外部依赖项。
那么什么是THE如何从 Perl 脚本中设置 ulimit 并使其适用于所有子项?
谢谢。
您已经回答了您的问题:使用BSD::资源.
Perl 核心中没有任何东西可以与setrlimit
。如果您不能(或不会)使用标准方法,那么您必须使用 hack。您已经描述过的任何方法都可以。 (请注意,您可以创建一个子例程来前置ulimit -s BLA;
每个命令,然后使用该子命令而不是system
.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)