Ctrl+z/bg/nohup/setsid/&
在Linux中,若是要让进程在后台运行,通常状况下,咱们在命令后面加上&便可,实际上,这样是将命令放入到一个做业队列中了:html
# ./rsync.sh & # jobs
对于已经在前台执行的命令,也能够从新放到后台执行,首先按ctrl+z暂停已经运行的进程,而后使用bg命令将中止的做业放到后台运行:bg %1
,放回前台运行:%1
。linux
可是如上方到后台执行的进程,其父进程仍是当前终端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,首先建立一个断开模式的虚拟终端,而后用-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 screen
或linux screen 命令详解。
原文连接地址:http://seanlook.com/2014/02/20/linux-process-running-background-screen/