问题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:

unbind C-b
set -g prefix C-a
setw -g mode-keys vi set -g default-terminal "screen-256color" # use 256 colors
set -g display-time 5000 # status line messages display
set -g status-utf8 on # enable utf-8
set -g history-limit 100000 # scrollback buffer n lines # split window like vim
# vim's defination of a horizontal/vertical split is revised from tumx's
unbind %
bind s split-window -h
unbind '"'
bind v split-window -v
# move arount panes wiht hjkl, as one would in vim after C-w
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
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. 提升Mac os x 10.10+xcode6.1之后,Cocoapods发生故障的解决方案

    提升Mac OS X 10.10+Xcode 6.1之后.Cocoapods图书馆管理也依赖于相应升级.现在最新的Release版本号是 0.34.在之前的版本号.当数据库更新和管理,你会遇到一个错误 ...

  2. CSDN帐号被盗尚未?

    总是早上登录CSDN,STIL.总是让C货币. 但是今天除了发C币,还提示我有2篇博文被删除了,打开看了看,原来不是我发的. watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  3. 怎么样ubuntu 64 11.04 在执行32位程序

    上网一查非常多的信息,头发上的今天ubuntu 64 11.04 在执行32位程序安装ia32-libs包,可执行例如,下面的命令.但提示无法安装 apt-get install ia32-libs ...

  4. C#采用的是“四舍六入五成双”、上取整、下取整

    c# 四舍五入.上取整.下取整 Posted on 2010-07-28 12:54 碧水寒潭 阅读(57826) 评论(4) 编辑 收藏 在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采 ...

  5. jquery :操作iframe

    原文 jquery :操作iframe 1. 内容里有两个ifame <iframe id="leftiframe"...</iframe> <iframe ...

  6. Linux进程的状态转换图

    http://blog.csdn.net/mu0206mu/article/details/7348618 ◆运行状态(TASK_RUNNING) 当进程正在被CPU执行,或已经准备就绪随时可由调度程 ...

  7. 编写WCF服务时右击配置文件无“Edit WCF Configuration”(编辑 WCF 配置)远程的解决办法

    原文:编写WCF服务时右击配置文件无“Edit WCF Configuration”远程的解决办法 今天在看<WCF揭秘>书中看到作者提出可以在一个WCF Host应用程序的App.Con ...

  8. C# .net基于Http实现web server(web服务)

    原文:C# .net基于Http实现web server(web服务) 什么是 web server?  百度百科是这么解释的: Web Server中文名称叫网页服务器或web服务器.WEB服务器也 ...

  9. deepinmind(转)

    http://it.deepinmind.com/ 花名有孚,支付宝工程师 有希望加入支付宝的同学,可以把简历发到我的个人邮箱spidercoco@gmail.com

  10. Oracle查询速度慢的原因总结

    Oracle查询速度慢的原因总结 查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致 ...