getrlimit,setrlimit函數
getrlimit容許一個進程查詢所受的的系統限制.這些系統限制經過一對硬/軟限制對來指定。當一個軟限制被超過期,進程還能夠繼續,固然這取決於限 制的類型,同時一個信號會發送給進程。另外一方面,進程不能夠超過它的硬限制。軟限制值能夠被進程設置在位於0和最大硬限制間的任意值。硬限制值不能被任何 進程下降,僅僅超級用戶能夠增長之。
數據結構
getrlimit和setrlimit都使用下面的數據結構: 併發
咱們來看每一個成員變量。rlim_cur 爲指定的資源指定當前的系統軟限制。rlim_max 將爲指定的資源指定當前的系統硬限制。
getrlimit和setrlimit函數的第一個參數是資源參數。這個參數用來指定進程獲取信息的那個資源。可能的資源值列於下面。你也能夠在/usr/include/sys/resource.h中找到它們: socket
RLIMIT_CPU資源限制指定一個進程能夠取得CPU執行任務的毫秒數。通常地,一個進程僅僅有一個軟限制而沒有硬限制。若是超出軟限制,進程會收到一個SIGXCPU信號。 ide
RLIMIT_FSIZE限制指定一個進程能夠建立的最大文件大小,以字節爲單位。好比,若是RLIMIT_FSIZE設置爲0,那麼進程將根本不能建立文件。若是進程超出此限制,就會發出SIGFSZ信號。 函數
RLIMIT_DATA 限制指定一個進程數據段可佔據的最大字節值。一個進程的數據段就是放置動態內存的一個區域(C/C++中用malloc()分配的內存)。若是超出限制,分配新內存的操做將會遭到失敗。 spa
RLIMIT_STACK限制指定進程棧可佔據的最大字節數。一旦超出硬限制,進程會收到SIGSEV信號。 .net
RLIMIT_CORE限制指定了進程能夠建立的最大core文件的大小。若是此限制設爲0,將不能建立。另外,當達到此限制時,全部正在寫core文件的進程都將被中斷。 指針
RMIMIT_RSS限制了進程的常駐集大小(resident set size)可佔據的最大字節數.這個進程的常駐集和進程所使用的物理內存數有關。 orm
RLIMIT_MEMLOCK限制指定了進程可使用系統調用到mlock進行鎖定的最大字節數。 blog
RLIMIT_NPROC 限制指定了一個指定用戶能夠開啓的最多併發進程數。這裏的用戶是經過進程來肯定的有效用戶ID.
RLIMIT_NOFILE 限制指定了進程能夠打開的最多文件數。
RLIMIT_SBSIZE限制指定用戶在任什麼時候刻可以使用的mbufs數。能夠查看socket man頁來得到mbufs的定義。
RLIMIT_VMEM限制說明一個進程的映射地址空間能夠佔據的字節數。若是超出限制,分配動態內存和到mmap的調用會失敗。
RLIM_INFINITY 宏用來去除對一個資源的限制。換句話說,將一個資源的硬限制設置爲RLIM_INFINITY將會致使此種資源的使用沒有任何系統限制。 將軟限制設置爲RLIM_INFINITY將會阻止進程收到任何軟限制警告。若是你的進程不想爲那些會致使進程在超過軟限制時發送信號的資源設置一個信號 處理器,這個參數將變得很是有用。 若是使用了getrlimit參數,那麼第二個參數須要設置爲一個到rlimit結構的有效指針。而後 getrlimit會將適當的限制值放入此結構。另外,在改變限制時,setrlimit會使用在第二個參數中設置值。將值設置爲0將會阻止使用此資源。 將值設置爲RLIM_INFINITY會除去對該資源的全部限制。這些函數都在執行成功後都返回0,反之爲-1.有任何錯誤產生,這些函數會相應的設置 errno。
http://blog.csdn.net/stormkey/article/details/5890512