fork()
é a chamada do sistema que cria um novo processo 1 .
Sempre que você executa um comando, você cria um processo.
Quando você executa um pipeline como date | od -ab
, você cria dois processos.
Mas normalmente você não recebe seu aviso de shell
(ou, conforme aplicável, vá para a próxima linha em um script)
até que o (s) processo (s) criado (s) tenha terminado e desaparecido.
No entanto, quando você executa um comando em segundo plano
(por exemplo, com command &
)
você pode continuar fazendo outras coisas
sem esperar que o (s) processo (s) criado (s) termine (s).
Isso pode ser uma capacidade muito poderosa,
mas facilita a criação de muitos processos.
E existem limites
além do qual você terá "Recurso temporariamente indisponível".
Tem certeza de que seu script de monitoramento está causando o problema (ou está apenas sofrendo dos sintomas)? O que é isso “Processo [que você tem] que leva horas de vez em quando para completar”? Poderia isso estar causando o problema? É um executável binário compilado ou é também um script? Se é um binário, você tem o código fonte?
Aqui estão algumas coisas que você pode tentar para isolar o problema:
- Inicie o processo de "horas por vez". Espere uma hora (use um despertador ou uma ampulheta, se isso ajudar) e então inicia o script de monitoramento. Isso falha muito em breve? Nesse caso, o problema provavelmente está no processo de “horas por vez”. Funciona por uma hora? (esta seria a hora da execução segundo do processo “horas por vez”) e depois falhar? Em caso afirmativo, o problema provavelmente está no script de monitoramento.
- Altere o período de sono de 5 para 30. Ainda falha após uma hora? Nesse caso, o problema provavelmente está no processo de “horas por vez”. Consegue durar seis horas? Em caso afirmativo, o problema provavelmente está no script de monitoramento.
- Examine seu script e veja se algum comando tem
&
. Há algum comandowait
? Se o processo de “horas por vez” for um script, faça o mesmo por ele. Se é um programa compilado e você tem a fonte, procure por chamadas parafork()
,vfork()
,spawn()
esystem()
(ewait()
), e veja se você consegue descobrir o que está acontecendo. - Como último recurso edite sua pergunta para incluir todos os detalhes relevantes (incluindo os resultados dos testes acima), e então talvez alguém possa lhe dar uma resposta específica.
Para responder sua última pergunta:
sim, ficar sem recursos é ruim para o sistema.