ref :https://www.cnblogs.com/lomper/p/7053694.html

问题描述

  • 当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一关闭,程序就不再运行了?的更多相关文章

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

    问题描述 当SSH远程连接到服务器上,然后运行一个程序,eg: ./test.sh, 然后把终端开闭(切断SSH连接)之后,发现该程序中断. 原因 主要元凶: 挂断信号(SIGHUP) 信号 概念介绍 ...

  2. 解决SSH窗口关闭,linux上的应用也关闭

    最近在应用linux上的服务的时候发现一个问题 使用SSH远程连接启动的应用在SSH关闭的时候也死掉了,网上查了一下原因 大致是说SSH在关闭的时候会发送一个终止的指令给应用,然后就停了 简要的解决办 ...

  3. android的原理,为什么不需要手动关闭程序

    转自android的原理,为什么不需要手动关闭程序 不用在意剩余内存的大小,其实很多人都是把使用其他系统的习惯带过来来了. Andoird大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制 ...

  4. iOS4.0及以上系统,关闭程序,applicationWillTerminate为调用问题解决

    iOS4.0以后系统支持多任务类型,程序按下home键后,程序进入后台运行,如果内存不足被系统关闭或者手动关闭,都不会调用applicationWillTerminate回调函数. 解决方法:可以在程 ...

  5. 批处理--批量打开程序&批量关闭程序

    批量打开程序 start D:\work\RunSvr01\IceFire88.01.exe start D:\work\RunSvr02\IceFire88.02.exe start D:\work ...

  6. CMD命令利用tasklist与taskkill关闭程序

    昨天远程服务器后,服务器无故卡住了,鼠标各种延迟与无反应,想在进程管理器里关闭程序也卡住,想点击重启系统也卡死无反应.纠结后win+R打开了cmd用shutdown重启才算搞定.重启期间思考了下,如何 ...

  7. 关于Cocos2d-x程序运行时候提示关闭程序的框框的解决方法

    1.这个情况是资源没有被加载的表现 如果AppDelegate.cpp里面没有文件索引的语句 FileUtils::getInstance()->addSearchPath("res& ...

  8. 使用VBS打开程序和关闭程序

    下面这个是先执行程序后,然后再结束程序. Dim Wsh Set Wsh = WScript.CreateObject("WScript.Shell") '下行是设置延时启动时间 ...

  9. C# 设置程序最小化到任务栏右下角,鼠标左键单击还原,右键提示关闭程序

    首先设置程序最小化到任务栏右下角 先给窗口添加一个notifyIcon控件 为notifyIcon控件设置ICO图标(不设置图标将无法在任务栏显示) 给notifyIcon控件添加点击事件 然后是最小 ...

随机推荐

  1. 【数论】[因数个数]P4167樱花

    题目描述 求不定方程 \(\frac {1}{x} + \frac{1}{y} = \frac{1}{n!}\)的正整数解的个数 \(n \leq 100^6\) Solution 化简得 \(x * ...

  2. 如何设置网站的robots.txt

    做过网站优化的朋友都知道,搜索引擎蜘蛛爬行抓取网站时首先会去访问根目录下的robots.txt文件,如果robots文件存在,则会根据robots文件内设置的规则进行爬行抓取,如果文件不存在则会顺着首 ...

  3. Axure9 9.0.0.3648 秘钥亲测可用

    用户名: thisProEdition秘钥:PkgeOGle9dSCMXTAczSrTGQZJLcviUJO1kG6onDIH/C68b+AUItWKdbBrmkJsJ0m

  4. Hash总结

    算法介绍 这个没什么好说的,就是一段比较简单的代码,具体的话要看题目. 自然溢出 这个是比较好用而且容易被卡的一种Hash方式. 用\(2^{64}\)当模数然后做\(Hash\),常数比较小. 单模 ...

  5. 聊聊Dubbo(六):核心源码-Filter链原理

    转载:https://www.jianshu.com/p/6dd76ce7338f 0 前言 对于Java WEB应用来说,Spring的Filter可以拦截WEB接口调用,但对于Dubbo接口,Sp ...

  6. java.lang.Exception: No tests found matching

    java.lang.Exception: No tests found matching 需要导入junit.jar 和 hamcrest.jar

  7. django orm 分页(paginator)取数据出现警告manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'sign.models.Guest'> QuerySet.

    使用django的orm做分页(Paginator)时出现了下面的警告 In [19]: p=Paginator(guest_list,2) manage.py:1: UnorderedObjectL ...

  8. 分布式事务二TCC

    分布式事务解决方案之TCC 4.1.什么是TCC事务 TCC是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try.确认Confirm.撤销Cancel ...

  9. Network Lock Manager Protocol (NLM)

    资料来源 https://wiki.wireshark.org/Network_Lock_Manager 目的 The purpose of the NLM protocol is to provid ...

  10. 文档工具的王者Sphinx

    Sphinx https://www.sphinx.org.cn/ Sphinx是一个工具,可以轻松创建由Georg Brandl编写并根据BSD许可证授权的智能和美观文档 它最初是为Python文档 ...