第十七篇:獲取 / 修改程式資源限制

穆晨發表於2017-01-28

前言

       每個程式都有其使用資源的一個限制,這些資源通常是在程式初始化時由程式 0 所建立的,然後由每個後續程式繼承。

       本文將介紹如何獲取並修改程式的資源限制

獲取資源限制函式:getrlimit()

       原型:int getrlimit (int resource, struct rlimit *rlptr)

       包含於:sys/resource.h

       作用:獲取 resource 資源的限制資訊,將其儲存在 rlptr 所指向的結構體中。( 後面將給出表示 resource 的巨集以及此結構體的定義 )

修改資源限制函式:setrlimit()

       原型:int setrlimit (int resource, const struct rlimit *rlptr)

       包含於:sys/resource.h

       作用:將資源 resource 加上 rlptr 所指結構體所描述的限制。

resource 取值

  

  

資源限制結構體 rlimit

1 struct rlimit {
2     rlim_t rlim_cur;    // 軟限制
3     rlim_t rlim_max;    // 硬限制
4 };

修改資源限制必須遵循的三條規則

       1. 任何一個程式都可以將一個軟限制更改為小於或等於其硬限制值。

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

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

程式碼實現

       下程式獲取程式的最大棧容量並列印出來:

 1 #include <stdio.h>
 2 #include <sys/resource.h>
 3 
 4 int main (void) {
 5 
 6     // 定義儲存程式資源限制的結構體
 7     struct rlimit l;
 8 
 9     // 獲取程式資源限制資訊
10     if (getrlimit (RLIMIT_FSIZE, &l)) {
11         printf("獲取資源限制資訊出錯\n");
12     return 1;
13     }
14 
15     // 列印資源限制資訊
16     printf("軟限: %ld\n硬限: %ld\n", l.rlim_cur, l.rlim_max);
17     
18     return 0;
19 }

       執行測試

       

       至於為什麼是 -1,這裡不去糾結這個問題了。

小結

       要注意更改資源限制的那三條規則。

相關文章