第十七篇:获取 / 修改进程资源限制
前言
? ? ? ?每個進程都有其使用資源的一個限制,這些資源通常是在進程初始化時由進程 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,這里不去糾結這個問題了。
小結
? ? ? ?要注意更改資源限制的那三條規則。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的第十七篇:获取 / 修改进程资源限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eigen教程(8)
- 下一篇: Cloudera Manager集群官方