Vamos entender a diferença entre um processo e um segmento. De acordo com o este link,
The typical difference is that threads (of the same process) run in a shared memory space, while processes run in separate memory spaces.
Agora, temos o parâmetro pid_max
, que pode ser determinado conforme abaixo.
cat /proc/sys/kernel/pid_max
Portanto, o comando acima retorna 32,768 , o que significa que posso executar 32.768 processos simultaneamente em meu sistema, que podem ser executados em espaços de memória separados.
Agora, temos o parâmetro threads-max
, que pode ser determinado conforme abaixo.
cat /proc/sys/kernel/threads-max
O comando acima me retorna a saída como 126406 , o que significa que posso ter 126406 threads em um espaço de memória compartilhada.
Agora, vamos considerar o terceiro parâmetro ulimit -u
, que diz o total de processos que um usuário pode ter em um determinado momento. O comando acima me retorna a saída como 63203 . Isso significa que, para todos os processos que um usuário criou em um determinado momento, o usuário pode ter 63203 processos em execução.
Caso hipotético
Portanto, supondo que haja dois processos sendo executados simultaneamente por dois usuários e cada processo esteja consumindo bastante memória, ambos os processos usarão com eficácia o limite de usuário 63203 nos processos. Então, se esse for o caso, os dois usuários terão efetivamente usado todo o 126406threads-max
size.
Agora, preciso determinar quantos processos um usuário pode executar a qualquer momento. Isso pode ser determinado a partir do arquivo /etc/security/limits.conf
. Portanto, existem basicamente duas configurações neste arquivo, conforme explicado em aqui .
Um limite soft é como um aviso e hard limit é um limite máximo real . Por exemplo, seguir impedirá que qualquer pessoa no grupo de alunos tenha mais de 50 processos, e um aviso será dado em 30 processos.
@student hard nproc 50
@student soft nproc 30
Os limites rígidos são mantidos pelo kernel, enquanto os limites flexíveis são impostos pelo shell.