O nohup tenta fazer com que o programa não tenha um terminal de controle?

2

Gilles disse

nohup and disown both can be said to suppress SIGHUP, but in different ways. nohup makes the program ignore the signal initially (the program may change this). nohup also tries to arrange for the program not to have a controlling terminal, so that it won't be sent SIGHUP by the kernel when the terminal is closed. disown is purely internal to the shell; it causes the shell not to send SIGHUP when it terminates.

$ nohup sleep 100 &
[1] 7882
nohup: ignoring input and appending output to 'nohup.out'
$ get-terminal-info-of-a-process.sh 7882
COMMAND                     CMD                         TT         PID  PPID CGNAME                      CGROUP                       PGID TPGID  SESS SESSION     OWNER
sleep 100                   sleep 100                   pts/5     7882  6780 systemd:/user.slice/user-10 7:pids:/user.slice/user-100  7882  7885  6780 c2          1000
$ tty
/dev/pts/5

o processo nohup ed ainda tem o mesmo tty que o shell de chamada: /dev/pts/5 . Então eu me pergunto o que Gilles quis dizer com "nohup também tenta arranjar para o programa não ter um terminal de controle, para que ele não seja enviado SIGHUP pelo kernel quando o terminal estiver fechado"?

Se o que ele disse é verdade, como nohup consegue separar um programa de um terminal de controle, em termos de qual API do Linux ou função (s) de chamada do sistema?

Obrigado.

    
por Tim 26.05.2018 / 23:13

1 resposta

3

Como eu, por sua vez, disse , um processo que está sendo executado por nohup ainda está associado a uma sessão de login e um terminal de controle. Afinal de contas, se não fosse, não haveria razão para os ginásios de ignorar o desligamento do terminal de controle.

nohup é um programa de carregamento de cadeia simples que faz duas coisas, redireciona a saída padrão e ignora o sinal de desligamento, antes de carregar a cadeia do programa alvo.

Aqui está o código de nohup do FreeBSD , do NetBSD , do OpenBSD e do shell TENEX C . Como pode ser visto, não há manipulação de sessões ou controle de terminais.

    
por 27.05.2018 / 00:34