问题1:为什么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终端窗体,在当中一个执行top命令。

在还有一个终端窗体。找到top的进程id为12912。父进程Id为12825,即登陆shell

使用pstree命令能够更清楚地看到这个关系:

使用ps-xj命令能够看到。登录shell(PID 12912)和top在同一个会话期。shell为会话期首进程。所在进程组PGID为12825,top所在进程组PGID为12912。为前台进程组。

关闭第一个SSH窗体,在还有一个窗体中能够​​看到top也被杀掉了。

问题2:为什么守护进程就算ssh打开的,就算关闭ssh也不会影响其执行?

由于他们的程序特殊,比方



执行这个以后。他不属於sshd这个进程组 而是单独的进程组。所以就算关闭了ssh,和他也没有不论什么关系。!

结论:守护进程的启动命令本身就是特殊的,和一般命令不同的

比方mysqld_safe 这种命令 一旦使用了 就是守护进程执行

所以想把一般程序改造为守护程序是不可能的

问题3 使用后台执行命令& 是否能将程序摆脱ssh?

我们做一个实验:



利用ctrl+d 注销以后 再进入系统 会不会看见这个命令再执行?

答案是 :命令被中止了!!

由于他依旧属於这个ssh进程组 就算加了&也无法摆脱!

问题4 nohup能解决的问题

可是为了能够再注销以后 依旧能后台执行,那麼我们就能够使用nohup这个命令,我们如今開始查找find / -name ‘http’ &

,并且希望在后台能够定期执行,

那麼就使用nohup:

嗯,证明执行成功。同一时候把程序执行的输出信息放到当前目录的 nohup.out 文件里去。

然后我们立即退出

再进去 打开vim nohup.out 果然信息都在

那么如今我执行一个比較长的搜索:



再退出 再进去 打开vim nohup.out 发现 原来 是默认迭加再后面得 信息 看看 的确 执行了:

加不加&并不会影响这个命令 仅仅是让程序 前台或者后台执行而已

能够使用tmux或者screen来保证ssh断开之后能继续执行程序。

我个人推荐使用tmux,由于screen的子界面和父界面没有不论什么不同。非常easy出错。可是tmux不一样。在子界面中执行tmux仅仅有会抛出错误信息:

并且tmux还能实现分屏功能:

下面是我的.tmux.conf:

  1. unbind C-b
  2. set -g prefix C-a
  3. setw -g mode-keys vi
  4. set -g default-terminal "screen-256color" # use 256 colors
  5. set -g display-time 5000 # status line messages display
  6. set -g status-utf8 on # enable utf-8
  7. set -g history-limit 100000 # scrollback buffer n lines
  8. # split window like vim
  9. # vim's defination of a horizontal/vertical split is revised from tumx's
  10. unbind %
  11. bind s split-window -h
  12. unbind '"'
  13. bind v split-window -v
  14. # move arount panes wiht hjkl, as one would in vim after C-w
  15. bind h select-pane -L
  16. bind j select-pane -D
  17. bind k select-pane -U
  18. bind l select-pane -R

版权声明:本文博客原创文章。博客,未经同意,不得转载。

实现关闭ssh继续实施方案---tmux的更多相关文章

  1. 生产环境MySQL数据库集群MHA上线实施方案

    生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...

  2. xx云网络实施方案案例

    由于xx云在我公司进行试用,对接我方存储,于是乎就负责网络实施方案,下面是具体方案介绍 ip分配 具体网络拓扑如下: 下面是两台交换机配置 IPMI交换机配置如下: [Quidway]di cu !S ...

  3. Ceph集群rbd-mirror A、B区域备份实施方案

    Ceph集群rbd-mirror A.B区域备份实施方案 备注:首先准备两个集群, 并确认其状态,集群的准备过程在这就不做陈述 1.查看集群状态 A区域 [root@ceph2111 ceph]# c ...

  4. 从零开始学习jQuery (八) 插播:jQuery实施方案

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章属于临时插播,  用于介绍我在本公司的j ...

  5. screen实现关闭ssh之后继续运行代码

    本文基于Ubuntu 14.04 使用SSH连接远程服务器,启动服务,退出SSH后,服务也就终止了,使用Screen可以解决这个问题. 1.安装Screen apt-get install scree ...

  6. ansible 关闭ssh首次连接时提示

    关闭ssh首次连接时提示. 修改/etc/ansible/ansible.cfg配置文件 方法一:(推荐,配置文件中存在) host_key_checking = False 方法二: ssh_arg ...

  7. Java之视频读取IO流解帧实施方案

    获取视频处理对象的方式有很多,读取本地文件.读取url.读取摄像头等,而直接读流解析视频的实施方案却难以寻觅.此处有两种方案处理视频流(此处设定场景为用户上传视频,同时两种方式均需服务端安装ffmpe ...

  8. 解决Linux关闭SSH,终端后运行程序终止问题(包括后台)

    问题描述: 每次SSH到服务器上,然后运行了一个自己写的服务端程序,比如 ./myserver.sh ,然后关闭ssh或者终端之后,发现服务不能访问. 简要分析下: 根据   这篇博文  的提示,ss ...

  9. 开源WebGIS实施方案(五):基于SLD实现图层符号化及其应用

    SLD概述 SLD(OpenGIS® Styled Layer Descriptor):图层样式注记.其当前版本是1.1.0.SLD是一种描述地图图层样式的标准,一般用于WMS中的图层符号化. 说白了 ...

随机推荐

  1. QlikView线图高亮选择尺寸

    作为标题,如今,学生问我一个问题.尺寸Month.expression它是Count(Id). 这个图是一个折线图,不管你选择哪个月的其他下拉列表,销售量.由于Expression里面是这样写的 Co ...

  2. Task的异步模式

    Task的异步模式 返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的 ...

  3. java并行体系结构

    并行编程 线程通信 共享内存和消息传递 线程同步 控制不同线程的运行顺序 java并发 基于共享内存模型 指令重排序 编译器重排序 处理器重排序 cpu重排序 写缓存区(cache.寄存器) 内存屏障 ...

  4. CentOS7 安装kubernetes

    2台机器,1台为Master,1台为Node 修改Host Master为dmaster,Node为dslave 安装K8s and Etcd 在Master机器上安装 yum install etc ...

  5. Hibernate的一些相关信息

    在没有学习Hibernate之前,我们一直都是用jdbc来连接数据库和操纵数据库.所以在刚接触Hibernate时,我们都有一个疑问,为什么要学Hibernate,jdbc不是挺好的吗?那么接下来就来 ...

  6. 如何使用滑动菜单SlidingMenu?

    左側滑: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanVuaHVhaG91c2U=/font/5a6L5L2T/fontsize/400/fill/I ...

  7. vmware 新机克隆

    选li72 右键点击------管理-----克隆 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlsaTcy/font/5a6L5L2T/fontsi ...

  8. Nyoj 修路方案(次小生成树)

    描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. 现在已经知道哪些城市之间可以修路,如果修路,花费是多少. 现在,军师小工已经找到 ...

  9. 微信公众号PHP简单开发流程

    原文:微信公众号PHP简单开发流程 微信公众号开发分傻瓜模式和开发者模式两种,前者不要考虑调用某些接口,只要根据后台提示傻瓜式操作即可,适用于非专业开发人员. 开发模式当然就是懂程序开发的人员使用的. ...

  10. erlang R17新socket选项{active,N}

    erlang R17带来了新的socket选项{active,N} .与{active,once}连同应用层提供的流量控制.为什么会这样选择,{active,once}不能够有效地抑制了很多socke ...