У меня есть Perl-скрипт, который выполняет различные этапы установки, чтобы настроить блок разработки для нашей компании. Он запускает различные сценарии оболочки, некоторые из которых вылетают из-за меньшего, чем требуется ulimit
с (в частности, размер стека -s
в моем случае).
Поэтому я бы хотел установить ulimit
, который будет применяться ко всем скриптам (children
), запускаемым из моего основного Perl, но я не уверен, как этого добиться - любые попытки вызвать ulimit из в пределах скрипта установите его только для той конкретной дочерней оболочки, которая немедленно завершается.
Я знаю, что могу позвонить 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, но я бы хотел избежать использования внешних зависимостей.
Так как же способ установить ulimit из скрипта Perl и применить его ко всем дочерним элементам?
Спасибо.