linux管理:后台运行的方法
程序运行的默认行为
当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。
后台运行归结为两种
途径
- 让进程忽略 HUP 信号
- 让进程运行在新的会话里从而成为不属于此终端的子进程。
方法1 nohup:
标准输出和标准错误缺省会被重定向到 nohup.out
方法2 setsid
使进程不属于 接受 HUP 信号的终端的子进程, 会将进程的父进程为init setsid command
方法3 (cmd &)
利用()使进程在子shell中运行, 父进程为当前shell的父进程(一般情况会是init).
jobs无法查看到,因为不在当前shell下
方法4 disown
使已放入后台(使用&)的进程忽略hup信号
disown -h %1 #来使某个作业忽略HUP信号。
disown -ah #来使所有的作业都忽略HUP信号。
disown -rh #来使正在运行的作业忽略HUP信号。
如果前台运行的程序,可以借助ctrl^z, bg放入后台运行再使用disown
方法5 screen
在screen下建立了一个新的Bash, 当Bash断掉后, 不影响screen
screen -dmS <name> #新建会话
screen -list #列出所有会话。
screen -r name #来重新连接指定会话。
screen -D -r #-r无法恢复时使用
screen -x name #分屏
用快捷键CTRL-a d 来暂时断开当前会话。