zsh에서 `nohup watch`가 작동하도록 하려면 `setopt nohup`이 필요한 이유는 무엇입니까?

zsh에서 `nohup watch`가 작동하도록 하려면 `setopt nohup`이 필요한 이유는 무엇입니까?

zsh에서는 setopt nohupnohup이 다음과 같이 작동하도록 해야 할 것 같습니다:

# 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

zsh에는 왜 필요 setopt nohup하지만 bash에는 필요하지 않습니까?

답변1

nohup설치된 신호 처리기를 대체하는 신호 처리기가 설치되어 있으므로 watch유효 하지 않습니다 .watchSIGHUPnohup

nohupSIGHUP신호가 무시되도록 하는 신호 처리기를 설정한 SIG_IGN다음 실행하도록 요청된 프로그램을 실행하는 방식으로 작동합니다. 이는 시작 시 신호가 구성된 방식으로 구성된 대상 프로그램에 대해 잘 작동합니다. 이는 기본적으로 프로그램이 신호에 전혀 주의를 기울이지 않는다는 것을 의미합니다. 그러나 watch다른 신호에 대한 신호 처리기를 설치하십시오 SIGHUP(종료하기 전에 터미널 설정 변경 사항을 되돌리기 위해).

관련 정보