В приведенном ниже коде появится столько детей, сколько возможно. Сами не будут развиваться дальше и станут зомби после выхода родительского процесса.
Сколько детских процессов родительский процесс порождает?Максимальное число дочерних процессов в Linux
ответ
Число дочерних процессов может быть ограничено setrlimit(2) с использованием RLIMIT_NPROC
. Обратите внимание, что fork(2) может не работать по нескольким причинам. Вы можете использовать bash
builtinulimit
, чтобы установить этот предел.
Вы можете использовать getrlimit
(или разобрать /proc/self/limits
, см. proc(5)), чтобы получить эту информацию.
Общесистемную, вы можете использовать /proc/sys/kernel/threads-max
с:
Этот файл определяет системный лимит на количество нитей (задачи), которые могут быть созданы в системе.
Существует также /proc/sys/kernel/pid_max
Этот файл определяет значение, при котором ИДП обернуть вокруг (то есть значение в этом файле на единицу больше, чем максимальный PID). PID больше этого значения не выделяются; таким образом, значение в этом файле также действует как общесистемный предел для общего количества процессов и потоков . Значение по умолчанию для этого файла 32768, приводит к тому же диапазону PID, что и к ранним ядрам. На 32-битных платформах 32768 является максимальным значением для pid_max. В 64-битных системах pid_max может быть установлен на любое значение до 2^22 (PID_MAX_LIMIT, около 4 миллионов).
Однако могут быть другие ограничения (в частности, место подкачки).
Задача для ядра - это либо однопоточный процесс, либо некоторый поток внутри некоторого процесса - например, созданный низкоуровневым syscall clone(2) (или некоторые kernel thread, как kworker
, ksoftirqd
и т. д.).
BTW, практическое число процессов намного ограничено доступными ресурсами. Типичный рабочий стол Linux имеет всего несколько сотен (прямо сейчас, мой рабочий стол Debian/x86-64 с 32Gb RAM & i5-4690S имеет 227 процессов). Таким образом, процесс является довольно дорогостоящим ресурсом (ему нужна оперативная память, ему нужен процессор ...). Если у вас их слишком много, вы испытаете thrashing. И на практике вы не хотите иметь слишком много runnable процессов или планируемых задач (возможно, всего несколько десятков из них максимум, возможно, не более нескольких из core).
Возвращает ли 'getconf CHILD_MAX' то же самое? –
Обновление - возможно, я был готов, не видел, чтобы не было вилки. Тогда это, вероятно, зависит от того, насколько дорого стоит вилка на этой машине. Зомби могут также использовать системные ресурсы, которые в какой-то момент будут исчерпаны. И команда ulimit, упомянутая ниже, конечно, остается в силе .--
Обновление 2: Я вижу это в some copy of /linux/kernel/fork.c, которое должно поддерживать работоспособность машины (max_threads, по-видимому, ограничивает количество процессов, так как каждый процесс имеет хотя бы один поток):
/*
272 * The default maximum number of threads is set to a safe
273 * value: the thread structures can take up at most half
274 * of memory.
275 */
276 max_threads = mempages/(8 * THREAD_SIZE/PAGE_SIZE);
- Оригинальный ответ:
он будет создавать столько процессов, как физически возможно (то есть, он будет быстро заморозить машину - я сделал это), или как многие как разрешено для текущего пользователя или оболочки, если такой предел наложен. В bash можно ввести ограничение через встроенную команду оболочки ulimit -u <number>
. Обратите внимание, что процесс, вероятно, не нужно запускать через bash (возможно, задание cron не будет).
Я думаю, что ваш ответ по-прежнему действителен, так как зомби-процессы по-прежнему остаются детьми. Дети не будут использовать много памяти, хотя они будут иметь только «task_struct» в ядре, только с несколькими уникальными действительными указателями. другие будут либо нулевыми, когда процесс станет зомби, либо они будут такими же, как и у родителей ». – holgac
- 1. Максимальное число дочерних процессов в Unix
- 2. Создание дочерних процессов в Linux
- 3. Максимальное количество процессов в Linux
- 4. Число дочерних процессов в родительском процессе C/C++, LINUX
- 5. Установить пороговое число процессов в Linux
- 6. Исключение дочерних процессов в окнах
- 7. родительский процесс и отношения дочерних процессов в скрипте Linux bash
- 8. C#/mono: получить список дочерних процессов в Windows и Linux
- 9. Unistd.h или stdlib.h при создании дочерних процессов в Linux
- 10. Можно ли ограничить pid дочерних процессов в Linux bash?
- 11. Как я могу обеспечить максимальное число дочерних элементов в узле?
- 12. Обнаружение дочерних процессов
- 13. Сколько дочерних процессов создано?
- 14. Ожидание дочерних процессов
- 15. Многопроцессорная обработка дочерних процессов
- 16. Экспедиторские сигналы дочерних процессов
- 17. Спасти несколько дочерних процессов
- 18. Process.Kill() для дочерних процессов
- 19. Ожидание дочерних процессов
- 20. Запуск 3 дочерних процессов
- 21. C - Создание дочерних процессов
- 22. Несколько дочерних процессов
- 23. Максимальное количество процессов excel?
- 24. Порождение дочерних процессов в заставке
- 25. Отслеживание дочерних процессов в Unix
- 26. Группа процессов для дочерних процессов библиотеки
- 27. Hibernate - Получение исключение: максимальное число процессов (550) превысило
- 28. Воспроизведение дочерних процессов с Perl
- 29. нерест и ждут дочерних процессов в Python
- 30. Python Multiprocessing - число процессов
Я не знаю, была ли в этом запрошена эффективность, но 'while (fork()> = 0)' было бы лучше. или хуже, в зависимости от того, кто является владельцем. – holgac
если я добавлю> = сыновья тоже делают сыновей, и я этого не хочу. – Moawiya
Процессы Zombie все еще имеют назначенные pids, поэтому [max_pids] (http://stackoverflow.com/questions/6294133/maximum-pid-in-linux) может быть вашим лимитом, если у вас достаточно памяти для хранения данных процесса. – holgac