C語言系統資源控制(getrlimit && setrlimit)

2puT發表於2016-07-20

每一個程式都有自己的一組資源限制,在Linux系統中我們可以通過
#include<sys/resource.h>
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit*rlim);
這2個API來取得和設定資源。
getrlimit用來取得,setrlimit用來設定。這二個引數都需要一個要控制的資源,比如控制CPU、記憶體、檔案描述符個數等等的控制,作為第一個引數傳入,第二個引數是一個rlimit的結構體地址(指標),他的結構如下定義:
定義放在標頭檔案/usr/include/bits/resource.h中
struct rlimit
      {
        
        rlim_t rlim_cur;
        
        rlim_t rlim_max;
      };
結構體中,rlim_cur是要取得或設定的資源軟限制的值,rlim_max是硬限制。
這兩個值的設定有一個小的約束:
1) 任何程式可以將軟限制改為小於或等於硬限制
2) 任何程式都可以將硬限制降低,但普通使用者降低了就無法提高,該值必須等於或大於軟限制
3) 只有超級使用者可以提高硬限制
一個無限的限制由常量RLIM_INFINITY指定(The      value      RLIM_INFINITY      denotes no limit on a resource )

RLIMIT_AS
                  The      maximum      size      of      the      process鈙      virtual memory (address
                  space) inbytes.      This limit affects callsto      brk(2),      mmap(2)
                  and      mremap(2), which fail with the error ENOMEM upon exceeding
                  this limit. Also automatic stack expansion will fail(and      gen-
                  erate      a SIGSEGV that kills the process when no alternate stack
                  has been madeavailable).       Since     

相關文章