2014-03-04 30 views
0

/proc //限制中的最大進程表示什麼?/proc/<pid>/limits中的最大進程是否表示該進程的子進程的最大數量

它是否表示該進程的最大子進程數?

如何限制在Linux運行時在特定進程的子進程的數量?

cat /proc/<pid>/limits 

Limit      Soft Limit   Hard Limit   Units  
Max cpu time    unlimited   unlimited   seconds 
Max file size    unlimited   unlimited   bytes  
Max data size    unlimited   unlimited   bytes  
Max stack size   8388608    unlimited   bytes  
Max core file size  0     unlimited   bytes  
Max resident set   unlimited   unlimited   bytes  
Max processes    29397    29397    processes 
Max open files   1024     4096     files  
Max locked memory   65536    65536    bytes  
Max address space   unlimited   unlimited   bytes  
Max file locks   unlimited   unlimited   locks  
Max pending signals  29397    29397    signals 
Max msgqueue size   819200    819200    bytes  
Max nice priority   0     0      
Max realtime priority  0     0      
Max realtime timeout  unlimited   unlimited   us   

回答

0

這個數字正是你所通過RLIMIT_NPROCgetrlimit得到什麼。這在手動頁面描述:

的過程的最大數目(或更精確地在Linux,線程) 了可以爲調用進程的實際用戶ID來創建。 遇到此限制後,fork(2)將失敗,並顯示錯誤EAGAIN。

因此,每次您分叉時系統都會檢查您的所有流程,然後再允許此流程進入fork。如果您降低某個進程的限制 - 可能是ulimit用於shell或setrlimit - 系統仍會統計所有進程,但它會根據新限制檢查該數量。

+0

那麼如何限制在Linux運行時在特定進程的子進程的數量? – Raghu

+0

@Raghu我不認爲有任何簡單而有意義的方式來做到這一點。有一個補丁添加了cgroup fork限制,但我認爲它不包含在mainline中。 – cnicutar

+0

我認爲你實際上可以限制cgroup中的進程數量,並且會強制執行某個進程的限制。 https://lwn.net/Articles/461462/ – cnicutar