美文网首页Linux/Unix知识点我用 LinuxLinux学习之路
为什么ssh一关闭,程序就不再运行了?

为什么ssh一关闭,程序就不再运行了?

作者: 乾九二 | 来源:发表于2017-06-20 11:12 被阅读144次

问题描述

  • 当SSH远程连接到服务器上,然后运行一个程序,eg: ./test.sh, 然后把终端关闭(切断SSH连接)之后,发现该程序中断.

原因

  • 主要元凶: 挂断信号(SIGHUP) 信号

概念介绍

  • 在Linux/Unix中,有这样几个概念:
  • 进程组(process group): 一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID.
  • 会话期(session): 一个或多个进程组的集合,有唯一一个会话期首进程(session leader). 会话期ID为首进程的ID.
  • 会话期可以有一个单独的控制终端(controlling terminal).
  • 与控制终端连接的会话期首进程叫做控制进程(controlling process).
  • 当前与终端交互的进程称为前台进程组.
  • 其余进程组称为后台进程组.
  • 根据POSIX.1定义: 挂断信号(SIGHUP)默认的动作是终止程序。

解释

  • 当终端接口检测到网络连接断开, 将挂断信号发送给控制进程(会话期首进程).
  • 如果会话期首进程终止,则该信号发送到该会话期前台进程组.
  • 一个进程退出导致一个孤儿进程组产生时, 如果任意一个孤儿进程组进程处于STOP状态, 发送 SIGHUP 和 SIGCONT 信号到该进程组中所有进程.
  • 孤儿进程参照

结论

  • 因此当网络断开或终端窗口关闭后, 也就是SSH断开以后, 控制进程收到 SIGHUP 信号退出, 会导致该会话期内其他进程退出.
  • 简而言之: 就是 ssh 打开以后, bash等都是他的子程序, 一旦ssh关闭, 系统将所有相关进程杀掉!! 导致一旦ssh关闭, 执行中的任务就取消了.

相关问题

为什么守护程序就算是 ssh 打开的, 关闭ssh也不会影响其运行?

  • 因为他们的程序特殊, 比如httpd –k start运行这个以后, 他不属于sshd这个进程组, 而是单独的进程组, 所以就算关闭了ssh, 和他也没有任何关系!

使用后台运行命令 & 能否将程序摆脱ssh进程组控制? 即关闭 ssh, 后台程序能否继续运行?

  • 只要是ssh 打开执行的一般命令,不是守护程序,无论加不加&,一旦关闭ssh,系统就会用SIGHUP终止.

如何解决方案

  • 在远端开启 tmux , 在 tmux 里运行程序, 此时运行的程序属于 tmux 的进程组, 不属于 ssh 进程组.
  • 使用 nohup 命令

http://zjking.blog.51cto.com/976858/1117828

相关文章

  • 为什么ssh一关闭,程序就不再运行了?

    问题描述 当SSH远程连接到服务器上,然后运行一个程序,eg: ./test.sh, 然后把终端关闭(切断SSH连...

  • 强制关闭某个端口上的服务程序

    有时候我们运行了某个程序监听一个端口,但没有关闭它,如果再运行新的程序也监听同一个端口就会导致运行失败,这时候必须...

  • 2019-08-29

    解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】 问题描述:当SSH远程连接到服...

  • 2018-07-27

    运行的程序会因为SSH的关闭而关闭,查看网上的说法是使用nohup参数,但是仍然会被关闭。然后才知道,此时ssh需...

  • 阿里云SSH断开影响后台

    挂断信号(SIGHUP)默认的动作是终止程序打开ssh默认下面的所有bash都是他的子程序,关闭ssh后,挂断信号...

  • 关闭ssh后,服务依旧运行

    问题:启动一后台服务,关闭ssh窗口后,服务一同退出原因:SIGHUP 信号解决:使用nohup命令让程序在关闭窗...

  • 在linux下发布jar包

    上传jar到服务器 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 &代表...

  • 为何要使用Screen?

    原因: 因为关闭ssh远程窗口后,运行的程序也会结束。 在执行一个程序的同时执行其他程序。 常见使用: 快捷键给s...

  • ansible的异步操作小练习

    通过ansible实现的ssh远程连接开启一个进程,当ssh远程连接关闭时,进程也会随之关闭,如果在ssh远程连接...

  • nohub执行jar,关于nohub的详解

    方式1: java -jar xxx.jar特点:当前ssh窗口被锁定,使用Ctrl+c打断程序运行,或者关闭窗口...

网友评论

  • 爪爪熊:还有一种方法就是把程序加入开机启动,重启下机器也行,当然,最爽还是nohup
    王一航: @角角头小坏蛋 这有点暴力啊……赞同楼上说的 用 tmux 神器
    爪爪熊: @乾九二 😄,谢谢哈
    乾九二:你这思想很危险啊:joy:
    建议tmux, nohup 看不到程序运行过程,没tmux方便

本文标题:为什么ssh一关闭,程序就不再运行了?

本文链接:https://www.haomeiwen.com/subject/eyyoqxtx.html