Linux进程后台运行
一般我们用终端连接linux服务器时,运行一个程序,退出终端后,程序就自动停止运行了。
无论进程是在后台还是在前台,它都与启动它的终端实例紧密绑定。当终端关闭时,它通常向绑定到终端的所有进程(前台、后台进程)发送SIGHUP信号。 这表示进程终止,因为它们的控制终端将很快不可用。
Linux进程组概念
在Linux/Unix中,有这样几个概念:
- 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
- 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做*控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。
使用nohup
nohup <command> &
使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件。
使用screen
总结
利用screen运行后台服务
screen
do...
Ctrl-a d
exit
常用
Ctrl-a c 创建新shell
Ctrl-a a 返回上一个shell
建立单窗口,
screen vi hello.c
暂时离开(把当前会话暂时放到后台),
Ctrl-a d
查看后台会话
mo@mo-Aspire-E5-572G:~/桌面$ screen -ls
There are screens on:
13039.pts-0.mo-Aspire-E5-572G (2017年12月01日 17时48分16秒) (Detached)
12922.pts-0.mo-Aspire-E5-572G (2017年12月01日 17时43分45秒) (Detached)
重新进入会话
screen -r 13039.pts-0.mo-Aspire-E5-572G
C-a ? 显示所有键绑定信息
C-a w 显示所有窗口列表
C-a a 切换到之前显示的窗口
C-a c 创建一个新的运行shell的窗口并切换到该窗口
C-a n 切换到下一个窗口
C-a p 切换到前一个窗口(与C-a n相对)
C-a 0..9 切换到窗口0..9
C-a a 发送 C-a到当前窗口
C-a d 暂时断开screen会话
C-a k 杀掉当前窗口
C-a [ 进入拷贝/回滚模式