SSH를 통해 실행될 때 백그라운드 프로세스는 SIGINT에 의해 종료되지 않습니다.

SSH를 통해 실행될 때 백그라운드 프로세스는 SIGINT에 의해 종료되지 않습니다.

ssh, nohup, bg 등을 시도하고 있습니다. 다음을 사용하여 원격으로 테일 프로세스를 시작했습니다.

$ ssh remotehost '{ nohup tail -f ut.log &> /dev/null < /dev/null &} && echo $!'

예상대로 백그라운드 테일 프로세스를 성공적으로 시작하고 pid를 인쇄하고 종료합니다. 그런 다음 원격 시스템에 로그인하고 pid를 확인합니다.

$ ps -o pid,tid,ppid,pgid,sid,class,nice,rtprio,pri,sched,cmd,tty,tpgid,cgroup,stat,flags,sig,sigcatch,sigignore,sigmask,euid,ruid,egid,rgid,ouid -p 27876
  PID   TID  PPID  PGID   SID CLS  NI RTPRIO PRI SCH CMD                         TT       TPGID CGROUP                      STAT F          PENDING           CAUGHT          IGNORED          BLOCKED  EUID  RUID  EGID  RGID OWNER
27876 27876     1 27847 27847 TS    0      -  19   0 tail -f ut.log              ?           -1 12:pids:/user.slice/user-28 S    0 0000000000000000 0000000000000000 0000000000000007 0000000000000000 28889 28889 10005 10005 28889

그러나 그 후에 end를 사용하여 프로세스를 종료하려고 하면 로 종료 kill되지 않거나 로 종료됩니다 .SIGINTSIGQUITSIGTERM

그러나 원격 시스템에서 정확히 동일한 명령을 직접 실행하고 end process 를 사용하려고 하면 killkill 만 사용됩니다 SIGINT.

$ { nohup tail -f ut.log &> /dev/null < /dev/null &} && echo $!
$ ps -o pid,tid,ppid,pgid,sid,class,nice,rtprio,pri,sched,cmd,tty,tpgid,cgroup,stat,flags,sig,sigcatch,sigignore,sigmask,euid,ruid,egid,rgid,ouid -p 28111
  PID   TID  PPID  PGID   SID CLS  NI RTPRIO PRI SCH CMD                         TT       TPGID CGROUP                      STAT F          PENDING           CAUGHT          IGNORED          BLOCKED  EUID  RUID  EGID  RGID OWNER
28111 28111 24889 28111 24889 TS    0      -  19   0 tail -f ut.log              pts/45   28128 12:pids:/user.slice/user-28 S    0 0000000000000000 0000000000000000 0000000000000001 0000000000000000 28889 28889 10005 10005 28889

왜 그런 상황이 있습니까?

편집하다:아마도 전자에 시그니뇨어 마스크가 존재하기 때문이 아닐까 싶습니다. 그러나 두 프로세스 모두 정확히 동일한 명령으로 시작됩니다. 그렇다면 어떻게 두 프로세스가 서로 다른 마스크를 가질 수 있습니까? 써봤는데 nohup마스크도 있었으면 좋겠어요 SIGHUP. 그런데 이 과정이 어떻게 다른 마스크로 이어지는 걸까요? 추가됨 ssh? 어떻게 제거할 수 있나요?

답변1

trap "" HUP && exec대신 를 사용하여 위의 코드 조각이 예상대로 작동하도록 만들었습니다 nohup.

$ ssh blr-utubntu16x64-1 '{ trap "" HUP && exec tail -f ut.log &> /dev/null < /dev/null &} && echo $!'
$ ps -o pid,tid,ppid,pgid,sid,class,nice,rtprio,pri,sched,cmd,tty,tpgid,cgroup,stat,flags,sig,sigcatch,sigignore,sigmask,euid,ruid,egid,rgid,ouid -p 28679
  PID   TID  PPID  PGID   SID CLS  NI RTPRIO PRI SCH CMD                         TT       TPGID CGROUP                      STAT F          PENDING           CAUGHT          IGNORED          BLOCKED  EUID  RUID  EGID  RGID OWNER
28679 28679     1 28650 28650 TS    0      -  19   0 tail -f ut.log              ?           -1 12:pids:/user.slice/user-28 S    0 0000000000000000 0000000000000000 0000000000000001 0000000000000000 28889 28889 10005 10005 28889

kill이 프로세스는 예상대로 with 을(를) 사용하여 종료됩니다 SIGINT. 하지만 나는 여전히 그 행동을 이해하고 싶습니다 nohup.

관련 정보