O modo tradicional, portátil e comumente usado é que o processo pai cuida de seus filhos.
As primitivas básicas são as wait
e waitpid
chamadas do sistema. Quando um processo filho morre, o processo pai recebe um sinal SIGCHLD
, informando que deve chamar wait
para saber qual filho morreu e seu status de saída. O processo pai pode optar por ignorar SIGCHLD
e chamar waitpid(-1, &status, WNOHANG)
quando for conveniente.
Para monitorar muitos processos, você poderia gerar todos eles a partir do mesmo pai ou invocá-los por meio de um processo de monitoramento simples que apenas chama o programa desejado, aguarda que ele termine e relate a terminação (na sintaxe do shell: %código%). Se você está vindo do mundo do Windows, observe que ter pequenos programas executando uma tarefa especializada é um projeto comum no mundo Unix, o sistema operacional foi projetado para tornar os processos baratos.
Existem muitos programas de monitoramento de processos (também chamados de supervisor) que podem relatar quando um processo é processado e, opcionalmente, reiniciá-lo, além de muito mais: Monit , Supervisionar , Upstart ,…