nohup VS screen

先来看一下nohup的帮助文档:

root@ubuntu:~# nohup --help

Usage: nohup COMMAND [ARG]...

  or:  nohup OPTION

Run COMMAND, ignoring hangup signals.


--help display this help and exit --version output version information and exit
If standard input is a terminal, redirect it from an unreadable file. If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise. If standard error is a terminal, redirect it to standard output. To save output to FILE, use 'nohup COMMAND > FILE'.

nohup
相对比较简单,帮助文档说的也比较明白。但是实际使用中往往需要配合一些其他的linux特性。

搭配“&”后台运行

使用 nohup
启动的程序会忽略 hangup
信号, hangup
只是终止信号的一种,但是在关闭终端时,还会有其他的终止的信号,所以这时候往往需要配合 & 一起使用,这样就可以做到不管是我们主动或者意外断开终端,程序依然能够继续运行。

root@ubuntu:~# nohup COMMAND &

搭配“>”、“<”重定向输入输出

因为 nohup
在缺省状态下会将原本输出到控制台的 stdout
stderr
重定向至执行目录下的nohup.out文件,在特殊需求的情况下需要配合linux的文件重定向自定义输入输出文件。下面的实例将标准输入(0)、标准输出(1)、标准错误(2)分别重定向至my.in、my.out、my.err。

root@ubuntu:~# nphup COMMDAND 0 < my.in 1 > my.out 2 > my.err

02

screen

比起 nohup
screen
要复杂的多,我们先来看一下 screen
官方给出的简介。

屏幕是一个全屏窗口管理器,它在多个进程(通常是交互式外壳程序)之间多路复用物理终端。
……
当screen被调用的时候,它会创建一个带有SHELL的窗口,你可以像平时操作SHELL一样的运行你的进程。你可以随时创建运行其他进程的窗口,杀死当前窗口,查看活动窗口的列表,打开和关闭输出日志记录,在窗口里面查看回滚历史记录,在窗口之间切换等。所有的窗口之间都是相互独立的。即使断开screen会话,进程依然能够在后台运行。
……

安装screen

虽然使用 screen
需要用户自己安装,但是 screen
安装相对简单。

CentOS用户可以使用 yum
安装:

root@centos:~# yum install screen

Ubuntu用户可以使用
apt 安装:

root@ubuntu:~# apt install screen

screen的用法

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]


-A  将所有的视窗都调整为目前终端机的大小。 -d<作业名称>  将指定的screen作业离线。 -h<行数>  指定视窗的缓冲区行数。 -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。 -r<作业名称>  恢复离线的screen作业。 -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。 -s<shell>  指定建立新视窗时,所要执行的shell。 -S<作业名称>  指定screen作业的名称。 -v  显示版本信息。 -x  恢复之前离线的screen作业。 -ls或--list  显示目前所有的screen作业。 -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

-r
搭配 -S
可以非常方便的复用如数据库查询之类的某些需要打开的SHELL操作。

screen的快捷键

比起退出 VIM
来说,退出 screen
的难度恐怕也不遑多让
。进入 screen
窗口后,虽然感觉是操作与普通终端无异,但是 screen
本身也有许多快捷键,而这些快捷键都需要搭配 Ctrl+a

ctrl a ctrl a,  最近使用的两个窗口之间切换

ctrl a + 数字,  切换到某个窗口

ctrl a + d,     detach

ctrl a + k,     关闭当前窗口

ctrl a + :,     进入命令行模式

ctrl a C,       清空窗口数据

ctrl a + A,     修改当前窗口的名称

以退出当前窗口为例,需要先按下 Ctrl+a
,松开之后快速按 d
。更多的快捷键可以查阅官方文档:
http://www.gnu.org/software/screen/manual/screen.html#Default-Key-Bindings

03

nohup VS screen

开箱即用,无需安装
易用性
支持窗口输入、输出
退出终端,进程继续运行 可以,但是需要配合& 可以
适用场景 单次运行、耗时很久的进程 除了支持后台运行外,正常的终端操作也可以使用screen完成。