通过 ssh 执行时,后台进程不会被 SIGINT 终止

通过 ssh 执行时,后台进程不会被 SIGINT 终止

我正在尝试 ssh、nohup、bg 等。我使用远程启动了一个尾部进程

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

它按预期成功启动了后台 tail 进程,打印它的 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

但在那之后,如果我尝试使用 结束进程kill,它不会以SIGINTor终止SIGQUIT,而是以 终止SIGTERM

但是,如果我直接在远程计算机上运行完全相同的命令,并尝试使用 结束进程kill,则它只会使用 终止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

为什么会出现这样的情况呢?

编辑:我认为这可能是因为前者存在 signignore mask。但这两个进程都是由完全相同的命令启动的。那么两个进程如何具有不同的掩模呢?我使用过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

相关内容