博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现关闭ssh继续实施方案---tmux
阅读量:5920 次
发布时间:2019-06-19

本文共 2208 字,大约阅读时间需要 7 分钟。

问题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 viset -g default-terminal "screen-256color" # use 256 colorsset -g display-time 5000 # status line messages displayset -g status-utf8 on # enable utf-8set -g history-limit 100000 # scrollback buffer n lines# split window like vim# vim's defination of a horizontal/vertical split is revised from tumx'sunbind %bind s split-window -hunbind '"' bind v split-window -v# move arount panes wiht hjkl, as one would in vim after C-wbind h select-pane -Lbind j select-pane -Dbind k select-pane -Ubind l select-pane -R

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

你可能感兴趣的文章
白山云科技发布云链新产品 专注热存储
查看>>
大众点评支付渠道网关系统的实践之路
查看>>
“新计算 开启新格局” 新华三集团全国巡展完美收官
查看>>
用友3.0 构筑企业社会化商业新时代
查看>>
如何在Linux中永久修改USB设备权限
查看>>
国舜股份:识别金融欺诈风险 护航大数据安全
查看>>
全部开放网关架构后 蓝牙技术充分扩展IoT潜在应用领域
查看>>
智能配网的秘密:配电“全能”运维模式
查看>>
让Web App更快的HTML5最佳实践
查看>>
《中国人工智能学会通讯》——7.21 什么是知识图谱
查看>>
不可不知:测试云计算服务的九个窍门
查看>>
数据中心存储技术正在新陈交替
查看>>
脑芯编:分手?摆脱冯诺依曼的深度学习硬件
查看>>
每家企业应该知道的10家SaaS初创公司
查看>>
监控报警系统搭建及二次开发经验
查看>>
为什么OpenStack会成为企业最重要的云平台?
查看>>
启动大数据项目之前需要问的5个问题
查看>>
注重品质,IoT设备推进边缘计算
查看>>
企业加密:利大于弊否?
查看>>
从VR到AR,开启新的计算平台
查看>>