2013-07-23 5 views
4

У меня вопрос в моем уме. Я просто хочу знать, каков максимальный предел числа дочерних процессов, когда он создается процессом, используя системный вызов fork()? Я использую UBUNTU OS (12.04) с ядром 3.2.0-45-generic.Максимальное число дочерних процессов в 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()' return в C и C++?] (Http://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c/18721336#18721336). Кроме того, стандарты используют '#include ' и '#include ', и вам тоже нужно. –

Смежные вопросы