Linux 进程后台运行的几种方式(screen)

Ctrl+z/bg/nohup/setsid/&

在Linux中,若是要让进程在后台运行,通常状况下,咱们在命令后面加上&便可,实际上,这样是将命令放入到一个做业队列中了:html

# ./rsync.sh &
# jobs

对于已经在前台执行的命令,也能够从新放到后台执行,首先按ctrl+z暂停已经运行的进程,而后使用bg命令将中止的做业放到后台运行:bg %1,放回前台运行:%1linux

可是如上方到后台执行的进程,其父进程仍是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给全部子进程,子进程收到hangup之后也会退出。若是咱们要在退出shell的时候继续运行进程,则须要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1):docker

# nohup ./rsync.sh &

# setsid ./rsync.sh &
或
# (./rsync.sh &)        ////在一个subshell中执行
# ps -ef|grep rsync

nohup 的用途就是让提交的命令忽略 hangup 信号,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。。通常咱们可在结尾加上"&"来将命令同时放入后台运行,也可用" > log.out 2>&1"来更改缺省的重定向文件名。shell

上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可使用disown命令:bash

# jobs
# disown -h %1
# ps -ef|grep rsync

效果与setid相同,可是disown后没法经过jobs命令查看了。session

screen

还有一种更增强大的方式是使用screen,首先建立一个断开模式的虚拟终端,而后用-r选项从新链接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令须要在后台连续执行的时候比较方便。命令行

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户能够经过该软件同时链接多个本地或远程的命令行会话,并在其间自由切换,能够看做是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。code

# yum install screen -y

经常使用screen参数:htm

# screen -S docker-d    新建一个名叫docker-d的session,并立刻进入
# screen -dmS docker-d  新建一个名叫docker-d的session,但暂不进入,可用于系统启动脚本里
# screen -ls            列出当前全部session
# screen -r docker-d    恢复到zhouxiao这个session,前提是已是断开状态(-d能够远程断开会话)
# screen -x docker-d    链接到离线模式的会话(多窗口同步演示)

# screen ./rsync.sh     screen建立一个执行脚本的单窗口会话,能够attach进程ID
# screen -wipe          检查目前全部的screen做业,并删除已经没法使用的screen做业

正常状况下,当你退出一个窗口中最后一个程序(一般是bash)后,这个窗口就关闭了。另外一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。blog

在每一个screen session 下,全部命令都以 ctrl+a(C-a) 开始。

C-a w    显示全部窗口列表
C-a k    这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。 
C-a d    detach,暂时离开当前session

须要了解的是,一个用户建立的screen,其余用户(甚至root)经过screen -ls是看不见的。另外,Ctrl+a在bash下是用来回到行开头,不幸与上面的组合快捷键冲突。

上面只是基本也是最经常使用的用法,更多请参考man screenlinux screen 命令详解


原文连接地址:http://seanlook.com/2014/02/20/linux-process-running-background-screen/

相关文章
相关标签/搜索