一、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. 利用Flash XMLSocket实现”服务器推”技术

    利用Flash XML Socket实现”服务器推”技术的基础是:1.Flash提供了XMLSocket类,服务器利用Socket向Flash发送数据:2.JavaScript和Flash的紧密结合, ...

  2. [golang note] 协程基础

    协程概念 √ 协程通常称为coroutine,在golang中称为goroutine. √ 协程本质上是一种用户态线程,它不需要操作系统来进行抢占式调度,在实际实现中寄存在线程之中. √ 协程系统开销 ...

  3. 微博开源框架Motan初体验

    前两天,我在开源中国的微信公众号看到新浪微博的轻量Rpc框架--Motan开源了.上网查了下,才得知这个Motan来头不小,支撑着新浪微博的千亿调用,曾经在2014年的春晚中有着千亿次的调用,对抗了春 ...

  4. Bootstrap fileinput v1.0(ssm版)

    前言bootstrap fileinput是一个很好的文件上传插件.但是官方不出api,这就尴尬了.百度一下,每个人写法都不相同,好多代码本身都是错的.我修改后才能跑起来.综上所述:所以今天我摸索了一 ...

  5. 向Oracle 数据表中插入一条带有日期类型的数据

    有一张表:batch(批次表) 表的字段如下: 第一种情况: 现在需要插入一条当前的系统时间 sql 如下: insert into batch (batch_id, cus_id, batch_nu ...

  6. javascript日期字符串和日期对象相互转换

    HTML页面间需要传递日期和时间参数的时候,如果需要对日期字符串进行时间的运算,就需要先将日期字符串转换成JS日期对象. 在js中,yyyy-MM-dd HH:mm:ss格式的日期字符串不能用来直接构 ...

  7. DB 异常

    1. ORA-00947: Not enough values 没有足够的值  执行insert的时候出现这个错误. 例如:insert into 表1 values (?,?,?); 表1的结构有4 ...

  8. TED #03# 10 ways to have a better conversation

    Teach you how to talk and how to listen Many of you have already heard a lot of advice on this, thin ...

  9. 20145326实验四 Android开发基础

    20145326实验四 Android开发基础 一.实验内容及步骤 安装 JDK 并配置 JDK 环境变量 找到之前path变量中的jdk文件所在位置并复制. 并用复制的变量名新建一个 JAVA_HO ...

  10. Mininet实验 测量路径损耗率

    参照:基于Mininet测量路径的损耗率 在SDN环境中,可以利用控制器来测量特定路径的损耗率,在本实验中,基于Mininet脚本,设置特定的交换机间的路径损耗速率,然后编写POX脚本,实现对路径的损 ...