Como funciona o nohup?

6

Meu entendimento é que, para bloquear um sinal de processo como SIGHUP , você precisaria fazer isso de dentro do processo para o qual o sinal está sendo enviado. Ainda assim, um shell Unix como bash pode gerar um processo filho e bloquear o sinal HUP para o filho de dentro do pai, usando o comando nohup . Como é que isso funciona? O nohup bloqueia o sinal e, em seguida, executa o processo filho sem bifurcar? Essa é a única maneira que posso pensar.

    
por user628544 13.10.2016 / 14:59

2 respostas

5

Você pode dar uma olhada no código-fonte de uma implementação de nohup , por exemplo do GNU coreutils versão . Há uma tonelada de configurações, algumas delas para fins de internacionalização, o restante para lidar com as várias opções de redirecionamento; então o real "nohupping" acontece:

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

Como você supõe, isso define o processo para ignorar o sinal HUP, então exec s o comando solicitado.

    
por 13.10.2016 / 15:06
-2

O ato de usar nohup simplesmente altera o PPID do processo gerado para 1 (init) para que quando o shell sair, ele não seja mais um processo filho desse shell e, portanto, não receba um HUP.

EDIT: Deve pensar mais antes de postar às vezes. Deixando aqui para me lembrar da minha vergonha: - (

    
por 13.10.2016 / 15:02

Tags