LINUX.ORG.RU

Установка ограничений (ulimits) при отладке в GDB

 , , , , ulimits


0

1

Подскажите. Такая ситауция:

Для разрабатываемой программы нужно увеличить лимит одновременно открытых файлов. Сделано через /etc/security/limits.conf добавлением строчек
* hard nofile 100000
* soft nofile 100000

и добавлением строки
session required pam_limis.so
в /etc/pam.d/login.

И вроде при загрузке во всех шеллах ulimit правильно работает и изнутри gdb тоже.
Но программа в отладке должна запускаться из под рута, и была сделана такая заплатка для GDB.
/usr/bin/gdb переделан в shell файл
exec sudo /usr/bin/gdb-bin «$@»
из которого запускается оригинальный gdb-bin c передачей параметров

НО: при такой схеме запуска gdb наследует стандартные ограничения, и не замечает новые.
Можно ли как-то исправить положение? Или изменить вообще схему.
Чтобы IDE под рутом не запускать и лимиты в gdb сохранить?
Дистрибутив - Debian Squeeze.

Ответ на: комментарий от DELIRIUM

Попробовал - так не работает. Я понял фишка именно в exec. Просто вызвав gdb, ограничения подхватываются. С exec нет.

ntohins
() автор топика

$ su
# ulimit bla-bla-bla
# gdb my_prog

andreyu ★★★★★
()

Для разрабатываемой программы нужно увеличить лимит одновременно открытых файлов.

limits.conf

Никогда не понимал извращенцев, которые так делают, ведь можно:

1. Вызывать ulimit в инит-скрипте запуска

2. Таки научиться писать нормальные приложения, а не школьный быдлокод и открыть для себя мир setrlimit + setuid для сброса рутовых привилегий.

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin

limits.conf делается для отладки. Разумеется будет запуск из скрипта. Речь идёт именно о связке с gdb.
А вот за setrlimit спасибо! как раз искал что-то подобное, но не по глазам было.
От огромного числа одновременно открытых файловых дескрипторов к сожалению не уйти из-за ряда причин. в частности ядра 2.4 и невозможности прикрутить libev (хотя я думаю там тоже события реализованы через простые пайпы, если epoll не доступен).
По поводу быдлокода, так он уже написан другими в Windows, и теперь цель запустить его в Линуксе.

ntohins
() автор топика
Ответ на: комментарий от red_eyed_peguin

Вызывать ulimit в инит-скрипте запуска

ничего не даст, если в limits.conf не выставлен соотв. hard limit

setuid для сброса рутовых привилегий.

рутовые привелегии не нужны, тк есть limits.conf

Таки научиться писать нормальные приложения, а не школьный быдлокод

ты не понимаешь, о чём говоришь, но делаешь это очень напыщено; да таки сюда можно применить слово «школьный»

anonymous
()
Ответ на: комментарий от anonymous

Менять limits.conf очень нежелательно. Сервер будет запускаться под рутом однозначно. И надеюсь у него хватит прав себе задать себе любые ограничения через setrlimit. Лишь бы setrlimit поддерживался древним ядром. Судя по ману могут быть проблемы. Но и при запуске из скрипта через ulimit я задавал предел nofile миллион, т.е. превышал hard limit. И всё нормально - getdtablesize возвращал мне мой миллион.

ntohins
() автор топика
Ответ на: комментарий от anonymous

ничего не даст, если в limits.conf не выставлен соотв. hard limit

Я понимаю, что нынче анонимус туп, но не думал, что настолько. setrlimit устанавливает и soft и hard limit. Или по-твоему limits.conf «читается ядром»?

рутовые привелегии не нужны

Ты, конечно, можешь трахаться с capabilities для биндинга к привилегированным портам, но многие вещи подобными костылями принципиально не решаются.

ты не понимаешь, о чём говоришь, но делаешь это очень напыщено

Лоровский анонимус уже лет 6 как не торт.

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin

Вызывать ulimit в инит-скрипте запуска

ничего не даст, если в limits.conf не выставлен соотв. hard limit

... кококо, setrlimit устанавливает и soft и hard limit

$ ulimit -u
1000
$ ulimit -u 9999
bash: ulimit: max user processes: cannot modify limit: Operation not permitted

многие вещи

о каких многих вещах речь? сразу нужно забивать гвозди микроскопом?

Лоровский анонимус уже лет 6 как не торт.

регистрант неторт с самого начала

anonymous
()
Ответ на: комментарий от anonymous

Я обычно не горю желанием учить дураков уму-разуму, просто почитай man setrlimit и выполни свой ulimit от нулевого uid'а, которому hardlimit'ы не писаны. Если мозгов хватает больше, чем на двачевание капчи, авось сообразишь, каким образом лимиты из limits.conf устанавливаются.

red_eyed_peguin
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.