限制程序使用的資源

2021-04-12 14:52:26 字數 2011 閱讀 5986

getrlimit和setrlimit函式

每個程序都有一組資源限制,其中某一些可以用getrlimit和setrlimit函式查詢和更改。

#include

#include

int getrlimit(int resource,struct rlimit *rlptr);

int setrlimit(int resource,const struct rlimit rlptr);

both return: 0 if ok,nonzero on error兩個函式

返回:若成功為0,出錯為非0

對這兩個函式的每一次呼叫都指定乙個資源以及乙個指向下列結構的指標。

struct rlimit;

這兩個函式不屬於posix.1,但svr4和4.3+bsd提供它們。svr4在上面的結構中使用基本系統資料型別rlim。其它系統則將這兩個成員定義為整型或長整型。

程序的資源限制通常是在系統初啟時由0#程序建立的,然後由後續程序繼承。在svr4中,系統預設值可以檢視檔案/etc/conf/cfd/mtune在4.3+bsd中,系統預設值分散在多個標頭檔案中。

在更改資源限制時,須遵循下列三條規則:

1.任何乙個程序都可將乙個軟限制更改為小於或等於其硬限制。

2.任何乙個程序都可降低其硬限制值,但它必須大於或等於其軟限制值。這種降低,對普通使用者而言是不可逆反的。

3.只有超級使用者可以提高硬限制。

乙個無限量的限制由常數rlim nfinity指定。

這兩個函式的resource引數取下列值之一。注意並非所有資源限制都受到svr4和4.3+bsd的支援。

rlimit_core(svr4及4.3+bsd)core檔案的最大位元組數,若其值為0則阻止建立core檔案。

rlimit_cpu(svr4及4.3+bsd)cpu時間的最大量值(秒),當超過此軟限止時,向該程序傳送sigxcpu訊號。

rlimit_data(svr4及4.3+bsd)資料段的最大位元組長度。這是圖7.3中初始化資料、非初始化資料以及堆的總和。

rlimit_fsize(svr4及4.3+bsd)可以建立的乙個檔案的最大位元組長度。當超過此軟限制時,則向該程序傳送sigfsz訊號。

rlimit_memlock(4.3+bsd)鎖定在儲存器位址空間(尚末實現)。

rlimit_ofile(svr4)每個程序最多開啟的檔案數。更改此限制將影響到sysconf函式在引數-sc-open-max中返回的值(2.5.4節)。見程式2.3。

rlimit_nproc(4.3+bsd)每個實際使用者id所擁有的最大子程序數。更改此限制將影響到sysconf函式在引數 childmax中返回的值(2.5.4節)。

rlimit_file(4.3+bsd)與svr4的rlimit ofile相同。

rlimit_rss(4.3+bsd)最大駐記憶體集位元組長度(rss)。如果物理儲存器供子應求,則系統核將從程序處取回超過rss的部分。

rlimit_stack(svr4及4.3+bsd)棧的最大位元組長度。見圖7.3。

rlimit_vmem(svr4)可映照位址空間的最大位元組長度。這影響到mmap函式(12.9節)。

資源限制影響到呼叫程序並由其子程序繼承。這就意味著為了影響乙個使用者的所有後續程序,需將資源限制設定構造在shell之中。確實,bourne shell和kornshell具有內部ulimit命令,cshell具有內部limit命令。(umask和chdir也必須是shell內部的)。

較早的bourmeshell,例如由貝克萊提供的一種,不支援ulimit命令。較新的kornshell的ulimit命令具有-h和-s選擇項,以分別檢查和修改硬和軟的限制,但它們尚末編寫入文件。

簡單的用例:

#include

<

sys/

time.h

>

#include

<

sys/

resource.h

>

#include

<

unistd.h

>

intmain()

程序資源限制

每個程序都有一組資源限制,程序的資源限制通常是在系統初始化時由 0 程序建立的,然後由後續程序繼承。每種實現都可以用自己的方法對資源限制做出調整。可以使用 getrlimit 和 setrlimit 函式來查詢和修改程序的資源限制。include int getrlimit int resource...

Linux程序資源限制

在linux系統下啟動執行乙個程序時,可對該程序執行時可占用的資源進行限制。程序的資源限制通常是在系統初始化時由init程序建立的,然後後續程序繼承。用法 include int getrlimit int resource,struct rlimit rlim int setrlimit int ...

linux程序資源限制

linux程序可分為前台程序 後台程序 守護程序 前台程序 後台程序沒有脫離shell,其父程序都為shell程序,其資源限制也繼承至相應shell程序,可用ulimit工具修改其資源限制 ulimit a 檢視當前shell所有資源限制 ulimit n 檢視當前shell能開啟的檔案總數 參考文...