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