LINUX.ORG.RU

свободные номера процессов


0

1

просто стало интересно, что делает система, когда они заканчиваются.

вот например program.sh:

#!/bin/bash
/bin/bash /path/to/this/program.sh

у меня набралось 32с чем-то тысячи, потом система повисела минуты 3, потом заработала снова.правда я раз 20 нажал ctrl+c.

★★★
Ответ на: комментарий от anonymous

Не. Просто не даёт запустить новые процессы.

anonymous
()
Ответ на: комментарий от dada

два варианта развития: или зависнит, или почти зависнит, но в любом случае будет ждать освобождения рессурсов.

linux: fork.c (line 1352)

if (pid != &init_struct_pid) {
    retval = -ENOMEM;
    pid = alloc_pid(p->nsproxy->pid_ns);
    if (!pid)
        goto bad_fork_cleanup_io;
}
т.е. плюёмся ошибками, но что-то ещё делаем. точнее ничего не делаем, т.к. форк возвращается с ошибкой.

bsd: kern_fork.c (line 438)

/* Find an unused pid satisfying 1 <= lastpid <= PID_MAX */
do {
    lastpid = 1 + (randompid ? arc4random() : lastpid) % PID_MAX;
} while (pidtaken(lastpid));
p->p_pid = lastpid;
висим, а точнее ждём, пока кто-то умрёт.

disclaimer: анализ очень поверхностный и может сильно отличаться от реальных событий.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от IvanR

форк-бомба, почти тоже самое, что и в твоём начальном сообщении, но элегантней. ☺

beastie ★★★★★
()
Ответ на: комментарий от IvanR

кажется понял, создается функция ":" и дальше уже понеслось, однако не понятно, почему компьютер так моментально зависает))

IvanR ★★★
() автор топика
Ответ на: комментарий от IvanR
:() {
    : | : & 
}
:

Так должно быть понятнее. : - это функция, которая запускается в фоновом режиме вызывая саму себя.

IPR ★★★★★
()
Ответ на: комментарий от IPR

да я уж понял, но все равно спасибо.

IvanR ★★★
() автор топика

вызывая саму себя

Причём дважды. Поэтому получается лавинообразное поедание PIDов, в отличие от примера ОПа.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.