zoukankan      html  css  js  c++  java
  • 实现关闭ssh继续实施方案---tmux

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

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

  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4677706.html
Copyright © 2011-2022 走看看