Como funciona o nohup?

8

Meu entendimento é que, para bloquear um sinal de processo como SIGHUP, você precisaria fazê-lo dentro do processo para o qual o sinal está sendo enviado. No entanto, um shell Unix como bashpode gerar um processo filho e bloquear o HUPsinal para o filho de dentro do pai, usando o nohupcomando Como é que isso funciona? Bloqueia nohupo sinal e depois executa o processo filho sem bifurcar-se? Essa é a única maneira que consigo pensar.

user628544
fonte

Respostas:

7

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

  signal (SIGHUP, SIG_IGN);

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

Conforme você supõe, isso configura o processo para ignorar o sinal HUP e, em seguida, execé o comando solicitado.

Stephen Kitt
fonte
-2

O ato de usar nohupsimplesmente 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.

Edição: deve pensar mais antes de postar às vezes. Deixando aqui para me lembrar da minha vergonha :-(

Incrédulo
fonte