命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
Linux上后台运行进程有一下三种方法:
nohup 全称:no hang up(不挂起)。也就是说,当前交互命令行退出的时候,程序还在运行。
nohup command > myout.file 2>&1 &
这条命令表示执行后退出交互命令行也不挂起,通过最后一个 &,表示后台运行,不霸占交互命令行,同时将标准输出和标准错误输出合并到myout.file文件中。
官方:https://www.gnu.org/software/screen/
# Debian
apt-get install screen
# CentOS 8以前
yum install screen
# CentOS 8以后
yum install epel-release
yum install screen
screen -R #虚拟终端名字
在这个界面,运行程序即可:
查看已经存在的screen
查看已经存在的screen很简单,输入:
screen -ls
重新进入screen
刚刚我们查看了已经存在的screen,接下来我们重新进入,有两种方式:
PID进入:使用screen -r #PID即可进入
screen名:使用screen -R #screen名即可进入
官方:https://github.com/tmux/tmux/wiki
tmux是一个 terminal multiplexer(终端复用器),它可以启动一系列终端会话。可以用其查看代码运行状态,可以在关闭terminal下仍然运行程序。与nohup相比,更加灵活。
它使您可以轻松地在一个终端中的几个程序之间切换,将它们分离(它们在后台运行),然后将它们重新安装到另一个终端。
# centos
sudo yum install tmux
# ubuntu
sudo apt-get install tmux
tmux -S farming
按下Ctrl+d
或者显式输入exit
命令,就可以退出 Tmux 窗口。
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效。
帮助命令的快捷键是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就会显示帮助信息。
实战demo:
Create a new tmux session using a socket file named farming
$ tmux -S farming
Move process to background by detaching
Ctrl+b d OR ⌘+b d (Mac)
To re-attach
$ tmux -S farming attach
Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
$ tmux new-session -A -D -s farming
To delete farming session
$ tmux kill-session -t farming