Por que o 'setopt nohup' é necessário para fazer o 'nohup watch' funcionar no zsh?

4

Em zsh, setopt nohup parece ser necessário para que o nohup funcione da seguinte forma:

# nohup does not work without setopt nohup
➜  /tmp  zsh
➜  /tmp  nohup watch ls &
[1] 31556
nohup: ignoring input and appending output to ‘nohup.out’                                                                                                                                                   
➜  /tmp  exit
zsh: you have running jobs.
➜  /tmp  exit
zsh: warning: 1 jobs SIGHUPed
➜  /tmp  ps -fp 31556
UID        PID  PPID  C STIME TTY          TIME CMD

# It works well with setopt nohup
➜  /tmp  zsh
➜  /tmp  setopt nohup
➜  /tmp  nohup watch ls &
[1] 31216
nohup: ignoring input and appending output to ‘nohup.out’                                                                                                                                               
➜  /tmp  exit
zsh: you have running jobs.
➜  /tmp  exit
➜  /tmp  ps -fp 31216
UID        PID  PPID  C STIME TTY          TIME CMD
nori     31216     1  0 19:00 pts/6    00:00:00 watch ls

Por que o zsh precisa de setopt nohup , já que o bash não?

    
por npcode 15.02.2015 / 04:30

1 resposta

4

nohup é ineficaz contra watch porque watch instala um manipulador de sinal para SIGHUP , que substitui o instalado por nohup .

nohup funciona configurando o manipulador de sinal para SIGHUP para SIG_IGN , o que faz com que o sinal seja ignorado e, em seguida, executa o programa que foi solicitado a executar. Isso funciona bem com programas de destino que deixam os sinais configurados da maneira como estavam quando começaram, o que significa principalmente programas que não prestam atenção aos sinais. Mas watch instala um manipulador de sinal para SIGHUP e outros sinais (para o propósito de restaurar as alterações que ele faz nas configurações do terminal antes de sair).

    
por 15.02.2015 / 12:08

Tags