我有一些旧代码需要堆栈不限于 8192kb 才能运行。我习惯这样做/etc/security/limits.conf
* stack hard unlimited
* stack soft unlimited
然而,在具有 bash shell 的本地帐户的 RHEL 7.9 中,当我执行 a 操作时,ulimit -s
它仍然会响应8192
.那么我修改limits.conf好像没有影响?
在有 bash shell 的终端窗口中,如果我ulimit -s unlimited
先执行然后运行我的代码,我的代码运行良好。
对于 RHEL 7.9 中的所有用户,将堆栈大小全局设置为无限制的最佳方法是什么?
我是否错过了一些东西,是ulimit
不是/etc/security/limits.conf
同一件事?
答案1
使用极限值设置限制的命令将仅更改当前生成的进程(shell)及其子进程的限制。
例如,如果您这样做:
#With root
ulimit -s unlimited
#Switch to other user
su - <user>
ulimit -s ## unlimited ; because this still be a child process
但如果你这样做:
#With root
ulimit -s unlimited
#Logout
logout
#Login as the other user then execute the following
ulimit -s ## 8192
使用/etc/security/limits.conf将永久设置它们,但您必须重新登录(新会话)它们才能生效。
如果甚至在其中设置堆栈/etc/security/limits.conf 无效然后检查它是否已被覆盖/etc/security/limits.d/或者查看您的配置文件 ~/.bash_profile ~/.bashrc。
另请检查以上是否在 / 下可用etc/pam.d/密码验证和/etc/pam.d/system-auth所以你确定/etc/security/limits.conf已加载:
session requires pam_limits.so