我最多可以用 shell 会话来描述这个问题:
这表明 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 的示例,但都没有出现此问题。重要的一点可能是将屏幕的组会话 ID 设置为屏幕组。但是,/etc/security/limits.conf 文件中没有任何限制。
有人知道发生了什么事以及我该如何解决这个问题?
答案1
我在系统范围的交互式非登录 shell 设置中发现了一个ulimit -c 0
没有 -S 的脚本。这就是导致问题的原因,因为运行 screen 会导致这些脚本对普通用户透明运行。这是脚本中的一个错误,系统管理员已经修复了它。