我有一个Perl脚本,用于为我们公司设置开发环境的各种安装步骤。它运行各种shell脚本,其中一些由于较低的ulimit(特别是我的情况下的堆栈大小-s)而崩溃。
因此,我想设置一个ulimit,适用于从我的主Perl脚本启动的所有脚本(子进程),但我不确定如何实现这一点 - 尝试从脚本内部调用ulimit只会在该特定子shell上设置它,然后立即退出。
我知道可以在运行Perl脚本之前调用ulimit或使用/etc/security/limits.conf,但我不希望用户知道任何这些信息 - 他们应该只知道如何运行脚本,脚本应该为他们处理所有内容。
我也可以每次运行命令时运行ulimit,例如ulimit -s BLA; ./cmd,但我不想每次都重复这样做,感觉有更好、更清晰的解决方案。
另一个疯狂的“解决办法”是创建一个名为BLA.sh的包装器脚本,它将设置ulimit并调用BLA.pl,但这也是一个hack,现在我有两个脚本了(我甚至可以让BLA.pl使用“ulimit -s BLA; ./BLA.pl --foo”调用自身,并根据是否看到--foo而行事不同,但这比以前更hack)。
最后,显然我可以安装BSD::Resource,但我想避免使用外部依赖项。
那么,从Perl脚本内部设置ulimit并使其适用于所有子进程的方法是什么呢?
谢谢。
因此,我想设置一个ulimit,适用于从我的主Perl脚本启动的所有脚本(子进程),但我不确定如何实现这一点 - 尝试从脚本内部调用ulimit只会在该特定子shell上设置它,然后立即退出。
我知道可以在运行Perl脚本之前调用ulimit或使用/etc/security/limits.conf,但我不希望用户知道任何这些信息 - 他们应该只知道如何运行脚本,脚本应该为他们处理所有内容。
我也可以每次运行命令时运行ulimit,例如ulimit -s BLA; ./cmd,但我不想每次都重复这样做,感觉有更好、更清晰的解决方案。
另一个疯狂的“解决办法”是创建一个名为BLA.sh的包装器脚本,它将设置ulimit并调用BLA.pl,但这也是一个hack,现在我有两个脚本了(我甚至可以让BLA.pl使用“ulimit -s BLA; ./BLA.pl --foo”调用自身,并根据是否看到--foo而行事不同,但这比以前更hack)。
最后,显然我可以安装BSD::Resource,但我想避免使用外部依赖项。
那么,从Perl脚本内部设置ulimit并使其适用于所有子进程的方法是什么呢?
谢谢。