O nohup é indefinido?

3

Se eu executar um programa com um loop infinito com nohup , o programa funcionará indefinidamente (até que a máquina seja reinicializada ou até eu terminá-la manualmente)?

    
por Anne Nonimus 25.08.2010 / 21:58

2 respostas

13

Nohup define o comportamento padrão do sinal HANGUP, que pode ser substituído pelo aplicativo. Outros sinais de outros processos com permissão (root ou mesmo usuário) ou mau comportamento (falhas de segmento, erros de barramento) também podem causar a finalização do programa. Limitações de recursos (ulimit) também podem terminar o programa.

Excluindo estes, seu loop infinito pode muito bem ser executado por um longo tempo.

    
por 25.08.2010 / 22:23
4

A seguir estão as duas linhas importantes do código-fonte do nohup.

(void)signal(SIGHUP, SIG_IGN); // Ignorar SIGHUP

execvp(*argv, argv); // Executa o comando.

Até que seu aplicativo chame algo como

signal (SIGHUP, SIG_DFL); // OU algum manipulador de sinal personalizado

Nas circunstâncias normais, ele continuará a ser executado até você reiniciar a máquina ou matá-la você mesmo.
Ele também pode ser encerrado nos casos apontados pelo kmarsh .

    
por 26.08.2010 / 20:37