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

なぜそのような状況がありますか?

編集する:おそらく電子にシグニニョアマスクが存在するからではないかと思います。しかし、両方のプロセスはまったく同じコマンドで始まります。それでは、どのように2つのプロセスが異なるマスクを持つことができますか?使ってみましたが、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

おすすめ記事