sighup 信号的问题

sighup 信号是一个很古老的信号,跟拨号啊,终端机啊什么有关系。
大家常常会听到这样的说法:当你 ssh 断开的时候,你 ssh 下面的程序会收到 sighup 信号,那么默认情况下程序就会退出。所以你需要用 nohup,disown 之类来做处理,避免程序退出。

那么实际上是怎么回事呢?

这个事情分成两个层面:

  1. sighup 是跟 tty 有关系的
    • 对 ssh 而言,是跟 pts 有关系
    • 进程从 pts 断开时,操作系统会给进程发送 sighup 信号
    • 推论:没有 pts,那么就不会有 sighup
  2. 收到 sighup 的进程可以选择如何处理 sighup 信号
    • 对 bash 而言,如果是有 job control,那么就会对 job 进行 sighup 信号转发
    • disown 这就是解绑了上面讲的 job control 的关系。nohup 也是做了类似的事情。

那么,现在你可以灵活运用这个原理来处理 sighup 的问题了。

习题:

  1. 如果你 ssh 到远程,在 bash 下启动一个程序放到后台,然后退出 shell,那么那个子进程会收到 sighup 信号并退出吗?
  2. 如果你 ssh -T (notty)到远程,默认启动了 bash,然后你把 sshd 杀掉,bash 也退出了,是为什么呢?怎么诊断这个问题?
  3. 如果你 ssh -T (notty)到远程,默认启动了 bash,你再启动 sleep 600,然后你把 sshd 杀掉,bash 和 sleep 会退出吗?

祝玩的愉快!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容