Прокрутка наследуется между окнами в GNOME 3

Вы неправильно поняли, как работает ограничение процесса. prlimit --nproc a.k.a. RLIMIT_NPROC a.k.a. ulimit -u - максимальное количество процессов¹ для пользователя в целом. Если у вас уже запущено 20 процессов и вы установили ограничение на 20, вы не можете создать новый процесс. Важно то, сколько процессов запущено от имени вашего пользователя, неважно, кто их родитель или каковы их ограничения.

Тонкость заключается в том, что хотя ограничение является глобальным, оно применяется только к процессам, в которых оно установлено. Итак, если у вас запущено 18 процессов и вы запускаете prlimit --nproc 20 bash на одном терминале и prlimit --nproc 30 bash на другом терминале, первый bash не сможет создать никаких подпроцессов, но второй может создавать еще несколько, пока их не будет 30 (независимо от того, были ли они запущены из этого bash или нет).

Если вы установите ограничение на 1 для процесса, то этот процесс вообще не сможет разветвляться, но другие процессы все равно могут разветвляться.Если вы установите ограничение на число в сценариях входа в систему, то это число будет применяться к вашим процессам (кроме тех, которые были запущены без чтения сценариев входа в систему, например, из задания cron). Другие случаи могут запутать.

Проще всего описать это с точки зрения реализации. Предел считывается только при выполнении системного вызова fork ¹. Когда процесс вызывает fork , ядро ​​подсчитывает количество R процессов, запущенных от имени одного и того же пользователя. Если предел NPROC вызывающего процесса меньше или равен R , то вызов отклоняется с ошибкой EAGAIN («ресурс временно недоступен», т.е. «попробуйте еще раз»).

В вашем случае у вас, вероятно, уже запущено не менее 20 процессов, а ваш .bashrc запускает несколько подпроцессов (или, скорее, не запускает их, потому что предел процесса был достигнут).

Вы видите два разных сообщения, потому что bash несколько раз пытается выполнить форк при ошибке EAGAIN . В первый раз он отображает сообщение о повторной попытке, и, наконец, он отображает сообщение о том, что он отказался.

¹ Точнее, потоки ядра.
² Этот системный вызов называется clone в Linux.

3
02.11.2017, 07:17
1 ответ

Запоздалый ответ, но это похоже на ошибку в WebKit:

1
27.01.2020, 21:35

Теги

Похожие вопросы