使用场景:
主要有三种方法:
&
同时需要说明的是:
工作号
。第一个被放入后台的命令,工作号是 1;第二个被放入后台的命令,工作号是 2,以此类推。操作:在命令后面加入 空格 &
。
作用:使用这种方法放入后台的命令,在后台处于执行状态。
限制条件:放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的。
注意事项:在后台运行作业时要当心,需要用户交互的命令不要放在后台执行,因为这样机器就会一直等待。不过,作业在后台运行一样会将结果输出到屏幕上,干扰工作。
缺点:
&
被到后台执行的进程,它的父进程还是当前终端shell的进程。所以一旦父进程退出,则会发送hangup信号
给所有子进程,子进程收到hangup以后也会退出。当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。有nohub和setsid两种方法:
- nohup 的用途就是让提交的命令忽略 hangup 信号。
- 可以用setsid将父进程设为init进程(进程号为1)。setsid的用途就是让进程运行在新的会话里从而成为不属于此终端的子进程(fork)。
[root@node2 ~]# echo $$ //显示 当前shell的进程号
22761
[root@node2 ~]# setsid test.sh & //设置父进程为init进程(进程号1)
[root@node2 ~]# ps -ef|grep test.sh //查询放入后台的进程
需要输入 exit 退出,会自动将输出写到当前目录下的 nohup.txt中。方法如下:
[root@node2 ~]# nohup test.sh &
[root@node2 ~]# exit //输入exit命令退出终端
说明
Tmux (terminal multiplexer,终端复用器)是一种终端复用器,是会话与窗口的"解绑"工具,将它们彻底分离。
Tmux开源代码:https://github.com/tmux/tmux.git。可以在OpenBSD,FreeBSD,NetBSD,Linux,OS X,Solaris上运行。
安装:
# CentOS 或 Fedora
$ sudo yum install tmux
启动:
$ tmux
退出:
#按下Ctrl+d或者显式输入exit命令
$ exit
新建会话:
tmux new -s <session-name>
分离会话:
Ctrl+b d
或者输入tmux detach
命令,就会将当前会话与窗口分离。
$ tmux detach
查看所有会话:
$ tmux ls
# or
$ tmux list-session
接入会话
tmux attach命令用于重新接入某个已存在的会话。
# 使用会话编号
$ tmux attach -t 0
# 使用会话名称
$ tmux attach -t <session-name>
杀死会话:
tmux kill-session命令用于杀死某个会话。
# 使用会话编号
$ tmux kill-session -t 0
# 使用会话名称
$ tmux kill-session -t <session-name>
切换会话:
# 使用会话编号
$ tmux switch -t 0
# 使用会话名称
$ tmux switch -t <session-name>
重命名会话:
$ tmux rename-session -t 0 <new-name> #将0号会话重命名。
综上,这里给出示例流程:
新建会话tmux new -s my_session。
在 Tmux 窗口运行所需的程序。
按下快捷键Ctrl+b d将会话分离。
下次使用时,重新连接到会话tmux attach-session -t my_session。
窗格操作的快捷键:
Ctrl+b %:划分左右两个窗格。
Ctrl+b ":划分上下两个窗格。
Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。
Ctrl+b x:关闭当前窗格。
作用:在命令执行过裎中按 Ctrl+Z 快捷键,命令在后台处于暂停状态。
注意:使用Ctrl+Z 放入后台的命令,就算不和前台有交互,能在后台执行,也处于暂停状态,因为 Ctrl+Z 快捷键就是暂停的快捷键。
[root@computer1~]# top
//在top命令执行的过程中,使用了Ctrl+Z后
[1]+ 已停止
//top命令被放入后台,工作号是1,状态是暂停。
[root@computer1~]# jobs //查看任务
[1]+ 已停止 top
[root@computer1~]# fg %1 //将后台任务调到前台
# ctrl+z //挂起当前任务
# ctrl+c //结束当前任务
# jobs //查看任务,返回任务编号n
# jobs -l //查看任务,返回任务编号n和进程号
# bg %n //将编号n的任务转为后台运行
# fg %n //将编号n的任务转为前台运行
Session(会话)
:每打开一次终端(本地或远程)登录Linux,都会生成一个新的会话:
Linux命令放入后台运行方法(&和Ctrl+Z)详解版
nohup命令、setsid命令、Daemon(守护进程)简要梳理
Tmux 使用教程-阮一峰