Linux上后台保持Terminal交互运⾏的三种⽅式:nohub、
screen和tmux
镜像下载、域名解析、时间同步请点击
后台运⾏
Linux上,如果⼀个进程需要保持后台运⾏,尤其是在Linux服务器上,后台运⾏程序、避免因为SSH连接断开⽽导致进程停⽌运⾏时,该怎么办?
很简单,相信很多⼈会选择systemd注册进程,但是如果只是临时使⽤,⽐如:wget在下载⽂件。或者只是偶尔使⽤呢?(毕竟,systemd配置还是挺⿇烦的……)
其实,⼤体有三种⽅法:
nohup &(Ctril+Z)
screen虚拟终端【推荐】
tmux终端复⽤器【推荐】
使⽤场景
什么情况下Linux上需要在终端(terminal)上,后台运⾏Linux呢?
举例:Minecraft服务器运⾏、Springboot打包的jar……
这个时候,我们终端关闭->SSH断开->JavaWeb随即停⽌运⾏。这个是因为,我们退出SSH连接时,发送SIGHUP信号给控制会话,进⽽导致我们前台会话上的程序停⽌运⾏。
所以,我们需要⽤⼀些⽅法,后台保存运⾏终端的交互。
Nohup
Nohup全称是:no hang up,中⽂直接以上就是不挂起,为什么是no hang up呢?其实很简单,举个例⼦:我们前台运⾏Aria2进程:
这个时候,Aria2进程交互就是挂起(hang up),保持在终端前台。
⽽Nohup(no hang up),就是这样的:
这样,终端没有输出内容,就是Nohup,对应地,我们可以在当前⽬录下看到终端输出内容:
当然,仅仅只有nohup是不够的,还需要&参数
&参数
这⾥的&参数,可不是“和”的意思,是让当前内容后台运⾏。
noup的使⽤
有了&参数,接下来,我们使⽤nohup就可以后台运⾏了:
# zsh aria2Strat.sh为我⽤zsh启动Aria2
nohup zsh aria2Strat.sh &
这样就可以后台运⾏Aria2了。你可以输⼊jobs命令查看后台的进程:
jobs
不过如果进程没有,或者是回发SIGHUP信号的话...关闭或者退出终端依旧会终⽌进程(这⾥就是终⽌Aria2进程)。
后台运⾏
如果,我们的脚本或程序,即没有守护线程,也没有SIGHUP信号呢?其实还是有两种⽅法,⾸先看Noup的选择参数:disown:在sh中,可以通过disown -h job名忽略SIGHUP 信号;disown命令将移除job表中特定的job,这也意味着该job不再接受任何信号。
Control-Z:通过 Control+Z 可以将当前进程挂起(放置后台并暂停运⾏),可通过fg 命令恢复⾄前台,也通过bg将挂起的进程后台运⾏。
shopt:shopt huponexit命令让sh在登录⽤的shell退出时,发送SIGHUP信号⾄所有的jobs。
也就是,我们可以使⽤disown或者Control-Z⽅式,在终端关闭情况下,后台运⾏进程。
Control-Z
这个⽅法其实很简单,⽤了这个⽅法,甚⾄不需要&参数(如果不需要保留终端上输出⽇志到nohup.out,不加nohup也可以):
# 运⾏Aria2
nohup zsh aria2.sh
之后,按Control+Z(Windows⽤户应该是Ctril+Z):
这个时候,Aria2已经暂停服务并移动⾄后台,我们可以使⽤jobs命令查看:
jobs
之后,我们可以使⽤bg命令,运⾏Aria2后台继续执⾏:
bg %1
其中,%1指代[1]。
相当于,⽤了&参数,就做了Control+Z和bg %1
回到这个后台进程,输⼊:
fg %1
disown参数
如果Control+Z⽅法不⾏,我们可以使⽤disown参数:
nohup zsh aria2Start.sh & disown
这个时候,就可以退出终端了。
当然,这种⽅法……⽆法回到后台进程的控制台内了~
screen虚拟终端
我其实更推荐screen,这个算是⼀个终端神器。
安装screen
⾸先,我们安装screen:
# Debian
apt-get install screen
# CentOS 8以前
yum install screen
# CentOS 8以后
yum install epel-release
yum install screen
创建虚拟终端
官⽅给的⽅法是
screen -S #虚拟终端名字
⽐如:
但是,我更推荐使⽤screen -R #虚拟终端名字来创建。以后有机会说原因。
创建好后:
在这个界⾯,运⾏程序即可:
之后,按Control+a进⼊screen的指令接受,再按d即可回到主终端。这个时候,关闭终端,Aria2也不会停⽌运⾏。查看已经存在的screen
查看已经存在的screen很简单,输⼊:
screen -ls
即可查看:
重新进⼊screen
刚刚我们查看了已经存在的screen,接下来我们重新进⼊,有两种⽅式:
PID进⼊:使⽤screen -r #PID即可进⼊
screen名:使⽤screen -R #screen名即可进⼊
⽐如,我使⽤screen - R进⼊:
screen -R aria2
tmux终端复⽤器
最后,我们看看,这个本质上和screen差不多(我个⼈还是喜欢⽤screen,别的原因,就是习惯了……)
安装tmux
⾸先是安装tmux
# centos
sudo yum install tmux
# ubuntu
sudo apt-get install tmux
之后,⼀般就可以使⽤了。
创建tmux终端
创建tmux终端很简单,也是⼀条命令:
tmux new -s demo
其中,demo为⾃定义名称。创建好后:
之后,按Control+b tmux指令接受,再按d即可回到主终端。这个时候,关闭终端,运⾏的程序也不会停⽌运⾏。查看已经存在的tmux
和screen⼀样,tmux查看已经存在的tmux也很简单:
tmux ls
重新进⼊tmux
重新进⼊的⽅法很简单:
tmux -a -t demo
这样就进⼊成功了:
总结
linux终端下载软件本⽂主要提供三种⾮systemd注册的⽅式,后台运⾏Linux进程的⽅法,个⼈更推荐使⽤screen或者tmux,有机会单独给⼤家讲讲这两个命令。
有⼩伙伴会问screen和tmux具体区别,其实使⽤起来基本没区别,细节的话,就是screen进⼊后,可以⽆限套娃新的screen……tmux⾥可不会让使⽤者这样套娃……
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论