UNIX环境高级编程》笔记--getrlimit和setrlimit函数
每個進程都有一組資源限制,其中一些可以使用getrlimit和setrlimit函數進行查詢和修改。
[cpp] view plain copy兩個函數返回值:如成功返回0,出錯則返回非0值。
進程的資源是在系統初始化時由進程0建立的,然后由每個后續進程繼承,每種實現都可以用自己的方法對各種限制做出調整。
對這兩個函數的每一次調用都會制定一個資源以及一個指向下列結構的指針。
[cpp] view plain copy在更改資源限制時,必須遵循下列三條規則:
1.任何進程都可將一個軟限制值更改為小于或者等于其硬限制值。
2.任何一個進程都可以降低其硬限制值,但它必須大于等于其軟限制值。這種降低對普通用戶來說是不可逆的。
3.只有超級用戶進程可以提高硬限制值。
這兩個函數的resource參數取下列值之一:
RLIMIT_AS:進程可用存儲區的最大總長度(字節)。
RLIMIT_CORE:core文件的最大字節數,若取值為0則阻止創建core文件。
RLIMIT_CPU:CPU時間的最大值(秒),當超過此軟限制時,向該進程發送SIGXCPU信號。
RLIMIT_DATA:數據段的最大字節長度。
RLIMIT_FSIZE:可以創建的文件的最大字節長度。當超過此軟限制時,則向該進程發送SIGXFSZ信號。
RLIMIT_LOCKS:一個進程可持有的文件鎖的最大數。
RLIMIT_MEMLOCK:一個進程使用mlock能夠鎖定在存儲器中的最大字節長度。
RLIMIT_NOFILE:每個進程能打開最大文件數。更改此限制將影響到sysconf函數在參數_SC_OPEN_MAX返回的值。
RLIMIT_NPROC:每個實際用戶ID可擁有的最大子進程數。更改此限制將影響到sysconf函數在參數_SC_CHILD_MAX返回的值。
RLIMIT_RSS:最大駐內存集的字節長度。(resident set size in bytes,RSS)
RLIMIT_SBSIZE:用戶在任一給定時刻可以占用的套接字緩沖區的最大長度。
RLIMIT_STACK:棧的最大字節長度。
RLIMIT_VMEM:這是RLIMT_AS的同義詞。
資源限制影響到調用進程并由其子進程繼承,這就意味著為了影響一個用戶的所有后續進程,需將資源限制的設置構造在shell之
中,確實,bsh,bash,ksh具有內置的ulimit命令,csh具有內置的limit命令。(umask和chdir也是shell內置的)
實踐:
[cpp] view plain copyLIMIT_AS ? ? ? (infinite) ? ? (infinite)
RLIMIT_CORE ? ?0 ? ? ? ? ? ? ?(infinite)
RLIMIT_CPU ? ? (infinite) ? ? (infinite)
RLIMIT_DATA ? ?(infinite) ? ? (infinite)
RLIMIT_FSIZE ? (infinite) ? ? (infinite)
RLIMIT_LOCKS ? (infinite) ? ? (infinite)
RLIMIT_MEMLOCK 65536 ? ? ? ? ?65536
RLIMIT_NOFILE ?1024 ? ? ? ? ? 4096
RLIMIT_NPROC ? 5875 ? ? ? ? ? 5875
RLIMIT_RSS ? ? (infinite) ? ? (infinite)
RLIMIT_STACK ? 8388608 ? ? ? ?(infinite)
總結
以上是生活随笔為你收集整理的UNIX环境高级编程》笔记--getrlimit和setrlimit函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: epoll使用详解(精髓)
- 下一篇: Linux服务器文件描述符最大值修改