进程的各种 ulimit 值是如何设置的?

进程的各种 ulimit 值是如何设置的?

ulimit如何设置进程的各种值?我对打开文件描述符的数量特别感兴趣。如何为给定进程设置该值?如果它基于启动进程的用户,那么如何为用户设置该值?

我如何为特定用户设置这些限制?

答案1

如果您没有更改 显示的任何资源的值ulimit,它将使用默认值,即您在运行内置的 shell 时看到的值ulimit -a。请注意,获取该值所涉及的系统调用是getrlimit(2)

setrlimit(2)同样,如果您需要更改需要使用系统调用的值,ulimit在为进程设置新的资源限制时执行此操作。

显示的资源限制ulimit适用于单个进程,而不是用户。

要设置每个进程打开文件描述符数量的新值(默认值为 1024),您可以使用:

ulimit -n 512

ulimit -Hn请注意,您可以分别使用和检查硬限制和软限制ulimit -Sn。您可以减少到任意值,也可以增加到硬限制。

要将限制增加到超出当前硬限制 (1024),您需要成为 root 用户。

请注意,您不能将该值增加到超出内核指定的最大值。

现在有一个专门在每个用户会话启动时/etc/security/limits.conf使用的文件,您可以在此处设置值,使其作为仅对正在运行的会话设置的永久生效。pampam_limits.soulimit

尽管您需要根据用户/组设置此文件上的值,但除了诸如之类的某些项目之外,限制适用于该用户/组下的每个进程maxsyslogins。文件中有足够的描述来帮助您入门。maxlogins/etc/security/limits.conf

另请查看help ulimitman 2 setrlimit以获得更多想法。

答案2

这是 POSIX - 参见man 3 sysconf

NAME
       sysconf - get configuration information at run time

SYNOPSIS
       #include <unistd.h>

       long sysconf(int name);

DESCRIPTION
       POSIX  allows  an  application  to  test at compile or run time whether
       certain options  are  supported,  or  what  the  value  is  of  certain
       configurable constants or limits.

       At  compile time this is done by including <unistd.h> and/or <limits.h>
       and testing the value of certain macros.

       At run time, one  can  ask  for  numerical  values  using  the  present
       function  sysconf().   One can ask for numerical values that may depend
       on the filesystem a  file  is  in  using  the  calls  fpathconf(3)  and
       pathconf(3).  One can ask for string values using confstr(3).

       The  values  obtained  from  these  functions  are system configuration
       constants.  They do not change during the lifetime of a process.  

       ...<snip>... 

       OPEN_MAX - _SC_OPEN_MAX
              The  maximum number of files that a process can have open at any
              time.  Must not be less than _POSIX_OPEN_MAX (20).

相关内容