gpt4 book ai didi

linux - 如何从适用于其子项的 Perl 脚本中设置 ulimit?

转载 作者:IT王子 更新时间:2023-10-29 00:16:42 26 4
gpt4 key购买 nike

我有一个 Perl 脚本,它执行各种安装步骤来为我们公司设置一个开发箱。它运行各种 shell 脚本,其中一些脚本因低于所需的 ulimit(具体而言,在我的情况下为堆栈大小 -s)而崩溃。

因此,我想设置一个 ulimit,它适用于从我的主要 Perl 脚本开始的所有脚本(children),但我不确定如何为实现这一点 - 从脚本中调用 ulimit 的任何尝试都只会将其设置在该特定的子 shell 上,该子 shell 会立即退出。

我知道我可以在运行 Perl 脚本或使用 /etc/security/limits.conf 之前调用 ulimit 但我不希望用户知道这些 - 他们应该只知道如何运行脚本,脚本应该为他们处理所有这些。

我还可以在每次运行命令时运行 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 并使其应用于所有子项的方法是什么?

谢谢。

最佳答案

您已经回答了您的问题:使用 BSD::Resource .

Perl 核心中没有任何与setrlimit 接口(interface)的东西。如果您不能(或不会)使用标准方法,则必须使用 hack。您已经描述的任何方法都可以使用。 (请注意,您可以创建一个子例程来为每个命令添加 ulimit -s BLA;,然后使用该子例程代替 system。)

关于linux - 如何从适用于其子项的 Perl 脚本中设置 ulimit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com