getrlimit,中文名為Unix系統函式,套用於電腦系統。
基本介紹
- 中文名:Unix系統函式
- 外文名:getrlimit
- 類型:軟體編程
- 領域:電腦系統
簡介,大綱,描述,返回值,錯誤,
簡介
getrlimit,setrlimit - 控制系統資源的最大使用量。
大綱
#include <sys/resource.h>
int getrlimit(int resource, struct rlimit *rlp);
int setrlimit(int resource, const struct rlimit *rlp);
描述
在作業系統中,我們能夠通過函式getrlimit()、setrlimit()分別獲得、設定每個進程能夠創建的各種系統資源的限制使用量。
調用getrlimit()或者setrlimit()來操作指定資源的操作上限。資源限制是一對值:一個指定了當前(軟)限制,另一個則代表一個最大(硬)限制。軟限制能夠被一個進程改變,只要保證它不大於硬限制。一個進程能夠(不能夠撤回的)降低它的硬體限制,前提是大於等於軟限制。僅當一個進程工作在一個系統超級用戶許可權下時能夠提高它的硬體限制。調用setrlimit()來改變硬限制和軟限制。限制值可能是一個“無窮大”值:RLIM_INFINITY。參數rlp是一個指向結構體rlimit的指針,該結構體包含如下成員:
rlim_t rlim_cur; /*當前(軟)限制*/
rlim_t rlim_max; /*硬限制*/
類型rlim_t是一個算術數據類型,等同於類型int,size_t,和off_t。
資源限制類型概要描述如下:
RLIMIT_CORE
core檔案的最大位元組數,若其值為0則阻止創建core檔案。
RLIMIT_CPU
CPU時間的最大量值(秒),當超過此軟限制時,向該進程傳送S I G X C P U信號。
RLIMIT_DATA
RLIMIT_FSIZE
可以創建的檔案的最大位元組長度。當超過此軟限制時,則向該進程傳送SIGXFSZ信號。
RLIMIT_NOFILE
每個進程能打開的最多檔案數。
RLIMIT_STACK
棧的最大位元組長度。系統不會動態增加棧的大小限制。
在進程內部,setrlimit()將增加限制以適合您的棧大小,而不會移動當前記憶體段來允許增長。為了保證進程的棧能夠增長,限制必須首先改變以適應運行進程使用的新棧大小。
在一個多執行緒的進程中,若線上程中調用setrlimit(),而該執行緒不是主執行緒,則對於棧的限制沒有任何改變。使用參數RLIMIT_STACK來調用setrlimit()僅僅能夠影響主執行緒的棧,並且該工作本來就應該由主執行緒來完成。
當超越棧大小限制時,信號SIGSEGV會發給進程。如果進程忽略該信號,或者捕捉該信號但是沒有設定處理措施,該信號默認設定為SIG_DFL處理方案。