2013-07-23 88 views
4

我有一個問題在我腦海裏。我只想知道當使用fork()系統調用由進程創建子進程時,最大限制數是多少? 我使用內核3.2.0-45-generic的UBUNTU OS(12.04)。Unix中子進程的最大數量

+4

'的ulimit -u'會告訴你進程的最大數量的用戶。 –

+0

但它是否與進程可創建的子進程的最大數目相同?作爲一個用戶,我可以在後臺同時運行多個進程而不創建任何子進程。 – Prak

+0

無論如何都是相同的限制。 –

回答

0

進程數不是按進程限制,而是按用戶限制。

0

在Linux上,你可以使用:

ulimit -u 

告訴你最大處理用戶可以運行和使用-a論證會告訴你所有的用戶限制。

2

編程,

#include <stdio.h> 
#include <sys/resource.h> 

int main() 
{ 
    struct rlimit rl; 
    getrlimit(RLIMIT_NPROC, &rl); 
    printf("%d\n", rl.rlim_cur); 
} 

其中結構RLIMIT是:

struct rlimit { 
    rlim_t rlim_cur; /* Soft limit */ 
    rlim_t rlim_max; /* Hard limit (ceiling for rlim_cur) */ 
}; 

man

RLIMIT_NPROC

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

0

答案已經在那裏獲得當前最大value.I想在/etc/security/limits.conf

sudo vi /etc/security/limits.conf

添加通過使變化,你可以設置此限制然後加入這一行的,該底部文件

hard nproc 1000

您可以提高這個給你想要的任何號碼 -

nproc是機器上可以同時存在的最大進程數。

2

,如果你需要的用戶限制最大進程數,這個代碼也工作:

#include "stdio.h" 
#include "unistd.h" 
void main() 
{ 
     printf("MAX CHILD ID IS :%ld\n",sysconf(_SC_CHILD_MAX)); 
} 
+1

請不要使用'void main()',除非你在Windows上,你可能不能使用'sysconf()'。參見[main()'應該在C和C++中返回什麼?](http://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c/18721336#18721336)。此外,標準使用'#包括'和'#包括',你也應該。 –