Как я устанавливаю ulimit из сценария Perl, который относится к его детям?

У меня есть сценарий Perl, который делает различные действия по установке для установки поля разработки для нашей компании. Это выполняет различные сценарии оболочки, некоторые из которых отказывают должный понизиться, чем необходимый ulimits (а именно, размер стека -s в моем случае).

Поэтому я хотел бы установить a 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 - нечто" и действуют по-другому на основе того, видит ли он - нечто или не, но это даже hackier, чем прежде).

Наконец, по-видимому, я мог установить BSD:: Ресурс, но я хотел бы избегать использования внешних зависимостей.

Таким образом, что путь состоит в том, чтобы установить ulimit из сценария Perl и заставить его относиться ко всем детям?

Спасибо.

8
задан Artem Russakovskii 9 February 2010 в 02:20
поделиться

3 ответа

В итоге я добавил ulimit -s BLA к командам, которые в этом нуждались. Я специально не хотел использовать BSD :: Resource, потому что это не пакет Perl по умолчанию, и он отсутствовал примерно на половине существующих машин разработки. Никакого взаимодействия с пользователем не было особым требованием.

1
ответ дан 5 December 2019 в 07:58
поделиться

Похоже, что выходы на самом деле отличаются. (da $, vs da2) для результата salt_20 и salt_21.

-121--1335571-

Для сверхскоростного индексатора MySQL извлеките Сфинкс . Это очень быстро для поиска того, что вам нужно в вашей базе данных MySQL, и делает расчеты гео/расстояния автоматически.

Учебное пособие: Гео/пространственный поиск с использованием поиска сфинкса и PHP

-121--3186078-

Вы уже ответили на свой вопрос: используйте BSD:: Resource .

В ядре Perl нет ничего, что бы взаимодействовало с setrlimit . Если вы не можете (или не будете) использовать стандартный метод, то вам придется использовать взлом. Любой из методов, которые вы уже описали, будет работать. (Обратите внимание, что можно создать подпрограмму для добавления ulimit -s BLA; к каждой команде, а затем использовать эту подпрограмму вместо system .)

12
ответ дан 5 December 2019 в 07:58
поделиться

Вы всегда можете обернуть ваш Perl небольшим скриптом оболочки:

#!/bin/sh -- # --*-Perl-*--
ulimit -n 2048
exec /usr/bin/perl -x -S $0 ${1+"$@"}
#!/usr/bin/perl
#line 6

use strict;

# etc, etc....

Это некрасиво, и, очевидно, время запуска скрипта будет немного больше.

4
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: