В лучшем случае я могу описать эту проблему с помощью сеанса оболочки:
Это показывает, что ulimit работает нормально. Это начало обычного сеанса ssh:
$>ulimit -c
0
(ushanka:973:0) ~
$>ulimit -c unlimited
(ushanka:974:0) ~
$>screen -t question
<-- see next preformated section for screen session -->
[screen is terminating]
(ushanka:976:0) ~
$>ls -alh /usr/bin/screen
-rwxr-sr-x 1 root screen 353K Dec 4 2006 /usr/bin/screen
(ushanka:977:0) ~
$>ulimit -c
unlimited
Это экземпляр экрана, в котором ulimit внезапно действует как жесткий предел 0, установленный для ядра.
$>ulimit -c
0
(ushanka:973:0) ~
$>ulimit -c unlimited
bash: ulimit: core file size: cannot modify limit: Operation not permitted
(ushanka:974:0) ~
$>cat ~/.bashrc
. $HOME/lbin/setenv
(ushanka:975:0) ~
$>cat ~/lbin/setenv
MACH=`uname -m`
settve() { eval `/home/tv/tools/common/bin/settve $0 $@`; }
export LD_LIBRARY_PATH=${HOME}/local/${MACH}/lib:$LD_LIBRARY_PATH
export PATH=${HOME}/local/${MACH}/bin:$PATH
(ushanka:976:0) ~
$>
Итак, внутри сеанса экрана ulimit, похоже, имеет жесткий предел, равный 0, и я не могу понять, почему. Обойти эту проблему можно с помощью su - в качестве команды для запуска экрана, однако это непрактично. Я видел много примеров использования ulimit изнутри экрана без возникновения этой проблемы. Одна важная вещь может заключаться в том, что идентификатор группового сеанса для экрана установлен на группу экранов. Однако в файле /etc/security/limits.conf ограничений нет.
Кто-нибудь знает, что происходит и как я могу это исправить?
Я нашел скрипт внутри общесистемной интерактивной настройки оболочки без входа в систему ulimit -c 0
без -S. Это было причиной проблемы, потому что при запущенном экране эти сценарии выполнялись прозрачно для обычного пользователя. Это была ошибка в скрипте, ее исправил сисадмин.