一、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. Action<>和Func<> 区别

    其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: public delegate void myDeleg ...

  2. MapReduce: number of mappers/reducers

    14 down vote It's the other way round. Number of mappers is decided based on the number of splits. I ...

  3. 20145104张家明 《Java程序设计》第5周学习总结

    20145104张家明 <Java程序设计>第5周学习总结 教材学习内容总结 第八章(概括为一下内容) 1.如果父类异常对象在子类异常前被捕捉,则catch子类异常对象的区块将永远不会被执 ...

  4. 51nod 1042 数字0-9的数量

    给出一段区间a-b,统计这个区间内0-9出现的次数.   比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Inp ...

  5. Bzoj 4371: [IOI2015]sorting排序 二分

    题目 似乎很久没写题解了... 这题是校里胡策的时候的题,比赛因为评测机有点慢+自己代码常数大没快读...被卡t了,但是bzoj上还是A了的...,因为bzoj时限比较宽可以不卡常. 题解: 首先可以 ...

  6. 论文笔记——N2N Learning: Network to Network Compression via Policy Gradient Reinforcement Learning

    论文地址:https://arxiv.org/abs/1709.06030 1. 论文思想 利用强化学习,对网络进行裁剪,从Layer Removal和Layer Shrinkage两个维度进行裁剪. ...

  7. poj 3630 Phone List trie树

    Phone List Description Given a list of phone numbers, determine if it is consistent in the sense tha ...

  8. vue中watch的用法

    一.首先确认watch是一个对象,一定要当做对象来用 watch:{ } 对象:有键,有值. 1.键:就是你要监控的那个家伙,比如说$route,这个就是要监控路由的变化.或者是data中的某个变量. ...

  9. js 杂谈

    js解释器有自己的内存管理机制(垃圾回收:自动回收无引用指向对象) js采用一种数字类型(64位浮点数),100与1e2完全相等 条件判断是被当为假的值:false.null.undefined.‘’ ...

  10. 一.UTF8字符集csv文件在oracle下乱码问题处理

    1.问题描述 在excel中生成了一个UTF-8编码格式的csv文件准备导入数据库,在notpad++下打开显示正常,编码集为UTF-8,通过pl/sql dev导入oracle是出现乱码,此时初步推 ...