一、nohup

工作中经常会遇到这样的需求,通过SecureCRT或其它工具远程到服务器执行某个任务,而这个任务耗时又比较长,你又不得不等待它执行完毕,但是如果此间如果关掉窗口或断开连接又会导致任务被kill掉。之所以会出现这种状况,是在窗口关闭或网络断开时,系统会发送SIGHUP信号给会话控制进程,该进程会转发SIGHUP信号给前台运行进程,该信号的默认动作是终止程序,从而导致任务被kill掉,罪魁祸首就是SIGHUP信号。
        如果能够忽略SIGHUP信号,则该问题就迎刃而解了,Linux提供的nohup命令就是为此而生的,nohup命令的语法格式如下:
        nohup [argument ...] &
        上面命令其实做了两件事,nohup忽略SIGHUP信号,&将任务放在后天运行。
        需要注意的是:nohup默认将程序的标准输出和标准错误输出重定向到nohup.txt文件中,也可以用">filename 2>&1"来更改缺省的重定向文件名。
        其实,nohup只是其中一个解决方案,Linux为我们提供了更强大的screen命令来解决此问题。

二、screen
        其实前面的问题只是screen功能的冰山一角,这里会详细介绍。
        简单来说是一个可以在多个进程之间多路复用一个物理终端的窗口管理器或者代理。
1、简单三部曲
        (1)创建会话
        #screen -dmS xxx
        上面命令用来建立一个处于断开模式的会话,其中,xxx为session name。
        (2)列出会话
        #screen -list
        (3)重连会话
        #screen -r xxx
        上面命令用来重新连接指定会话,其中,xxx为会话名称。
        有了上面3个命令后,基本上你也算是screen圈子里的人了。

解决screen状态为Attached连上不的问题

可以这样
# screen -D -r 25372   #解释:-D -r 先踢掉前一用户,再登陆。
就可以进去了。
语法:
screen -D -r <session-id>

2、详细命令介绍
        (1)创建会话
                (A)直接在命令行中键入screen命令
                #screen
                上面命令将创建一个由screen管理的会话,除了享有screen的各种优势外,与直接SecureCRT没什么区别,你可以任意执行shell或者你的程序,在该窗口中输入exit回车则退出窗口,如果该screen会话只有唯一窗口,则会话直接退出,否则screen会自动切换到前一个窗口。
                (B)screen命令后跟要执行的程序
                #screen vi test.c
                screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口,如果会话有且仅有这个窗口,则会自动退出会话。
                (C)在会话中创建多个窗口
                在screen会话中可以创建多个窗口,在当前screen窗口中键入ctrl+a c 即可,screen会在该会话中生成一个新的窗口并切换到该窗口。
        (2)断开与重连
        screen可以不中断窗口中正在运行的程序而仅仅暂时断开(detach)screen会话,并且可以在任意时间里重新连接(attach)该会话,此时可以原封不动地回到断开会话时的状态。在screen窗口中键入ctrl+a d,此时,screen会提示detached,一段时间后,screen -ls找回会话,重新连接screen -r xxx就能满血复活了。
        需要注意的是:screen中任何命令都是由ctrl+a和另外一个字母组合出来的,前缀ctrl+a是必须的。
        screen会话有几个状态,分别是attache(连接)、detache(断开)、dead(会话被人为kill掉)、remove(使用screen -wipe清除会话后的状态)。
        screen重连会话除了可以用会话pid外,还可以用会话名称重连,后一种方式更直观和有意义。
        (3)管理会话
                (1)窗口命名
                #ctrl+a A xxx
                (2)列出窗口
                #ctrl+a w
                (3)保存窗口
                #ctrl+a d
                (4)退出窗口
                #ctrl+a k
                (5)屏幕切分
                #ctrl+a S        //水平切分
                #ctrl+a |        //垂直切分
                #ctrl+a tab     //在各区块之间切换(每个区块上都可以创建窗口并运行进程)
                #ctrl+a X        //关闭当前焦点所在区块
                #ctrl+a Q        //关闭除当前区块外的所有区块
                (6)会话共享
                #screen -x

Linux之screen命令详解的更多相关文章

  1. [转帖]linux screen 命令详解,xshell关掉窗口或者断开连接,查看断开前执行的命令

    linux screen 命令详解,xshell关掉窗口或者断开连接,查看断开前执行的命令 https://binwaer.com/post/12.html yun install -y screen ...

  2. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  3. linux之find命令详解

    linux之find命令详解 查找文件find ./ -type f查找目录find ./ -type d查找名字为test的文件或目录find ./ -name test查找名字符合正则表达式的文件 ...

  4. Linux下rar命令详解

    Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...

  5. linux下tar命令详解

     linux下tar命令详解    tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.ta ...

  6. Linux下chkconfig命令详解(转)

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

  7. Linux 之Cut命令详解

    摘自:http://blog.csdn.net/zsf8701/article/details/7718680 Linux 之Cut命令详解 cut是一个选取命令,就是将一段数据经过分析,取出我们想要 ...

  8. Linux知识积累(4) Linux下chkconfig命令详解

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

  9. Linux下top命令详解

    Linux下top命令详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷 ...

随机推荐

  1. PHP实现返回JSON和XML的类分享

    PHP实现返回JSON和XML的类分享 <?php     class Reponse{         //private $result = array('code'=null,'messa ...

  2. VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)

    属性页对话框包括向导对话框和一般属性页对话框两类,上一节鸡啄米讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的 ...

  3. CCPC2018-湖南全国邀请赛 Solution

    A - Easy $h$-index 后缀扫一下 #include <bits/stdc++.h> using namespace std; #define ll long long #d ...

  4. 日志处理(二) 日志组件logback的介绍及配置使用方法(转)

    本文转自:http://www.cnblogs.com/yuanermen/archive/2012/02/13/2348942.html http://www.cnblogs.com/yuanerm ...

  5. Aliexpress API 授权流程整理(转载)

    前言 我零零总总用了好几个月的时间,写了一个自用的小程序,从 Aliexpress 上抓取订单的小程序.刚开始写的时候,该API还没有开放,而且没有订单相关的功能.我完全是通过模拟用户在网页上的操作来 ...

  6. nvm命令行操作命令

    1,nvm nvm list 是查找本电脑上所有的node版本 - nvm list 查看已经安装的版本 - nvm list installed 查看已经安装的版本 - nvm list avail ...

  7. 数据导入(二):MapReduce

    package test091201; import java.io.IOException; import java.text.SimpleDateFormat; import java.util. ...

  8. cygwin安装方法

    一.环境 OS:windows 二.安装cygwin以及各类cygwin下的软件 2.1 从官网http://www.cygwin.com/获取最新的版本 2.2 安装过程如下图

  9. AOP AspectJ注解

    概念: 切面(aspect):用来切插业务方法的类.连接点(joinpoint):是切面类和业务类的连接点,其实就是封装了业务方法的一些基本属性,作为通知的参数来解析.通知(advice):在切面类中 ...

  10. js的函数作用域

    1.js作用域 //在函数内部声明的变量,如果不加var,则自动变成window的成员//预处理:扫描代码,看到var或者函数就生效./*function f(){a = 8;//var a = 8; ...