Linux - 打开文件继承

Linux - 打开文件继承

为了测试,我将全局打开文件限制更改为 3000:

#sysctl -w fs.file-max=3000
fs.file-max = 3000

#cat /proc/sys/fs/file-nr
2016    0       3000

我创建了一些文件:

 i=1; while [ "$i" -le 1000  ]; do : >> "$i"; i=$(($i + 1)); done

我把它们打开了:

i=1; while [ "$i" -le 1000  ]; do less  "$i" & ; i=$(($i + 1)); done

我已经看到了我刚刚造成的混乱:

ksh: /bin/less: cannot execute [Too many open files in system]

我知道我已经到达极限了......

# cat  /proc/sys/fs/file-nr
3008    0       3000

如果我现在提高打开文件数限制(这样我就可以使用另一个控制台通过 ssh 连接),并且如果我在将打开文件数上限设置为 3000 后检查我最近生成的一个 less,我会看到:

# cat /proc/28282/limits  | grep 'Max open files'
Limit                     Soft Limit           Hard Limit       Units
Max open files            1024                 16384            files

尽管没有提到 3000,“硬限制”仍然设置得很高。所以我们达到了系统限制,而不是每个进程的限制。

为什么不指示新创建的进程继承 3000 而不是 16384?

我使用新的 shell 登录到新的终端,那么为什么我的 shell 不会被告知 3000 并将其传递给 less?

这是一个 2.6.32 内核

答案1

通过此链接Ulimit 文件描述符限制未应用于特定进程

我引用:

“/etc/security/limits.conf 是 pam_limits 的一部分,因此此文件中设置的限制在登录会话期间由 pam_limits 模块读取。登录会话可以通过 ssh 或终端进行”

/etc/sysctl.conf 是系统范围的全局配置,我们无法在此处设置用户特定的配置。它设置了所有用户/进程总共可以使用的最大资源量”

/etc/sysctl.conf 不是设置此项的正确位置。

我需要全面调查 /etc/security/limits.conf 和“pam_limits”

相关内容