长时间连接到远程Linux服务器进行一些耗时比较长的工作(比如传输大文件,系统备份等)时,这些工作耗时过长且中途不可关闭shell窗口或者断开连接,否则任务会被kill。
关掉窗口/断开连接会使得正在运行的程序死掉,是由于signup挂断信号,如果能够忽略signup信号,那么当我们执行耗时较长的任务时,便可以忽略它让它自己在后台运行。
想要忽略signup信号,可以使用nohub和screen两种方法。
1.nohub
nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。
nohup Command [ Arg … ] [ & ]
注意:在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而不能每次在nohup执行成功后直接点关闭程序按钮关闭终端.。这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。
2.screen
screen可以简单理解为虚拟终端。我们可以在这个虚拟终端中做各种普通终端中可以做的事情,并且关掉终端或者断开连接时任务不会被挂断。
创建screen的命令直接敲:
screen(如果出现-bash: screen: command not found,请先尝试安装screen)
关闭screen使用exit命令。如果使用screen -d命令。则不关闭screen回到shell界面。
在screen界面中再次敲screen,则再次打开一个screen界面,此时使用exit命令则会进入上一个screen界面。
常用命令:
screen 创建一个screen(可以用screen -S ID,打开一个指定的ID session)
screen -ls 显示所有的screen会话
screen可用作远程演示,A在某服务器上开启screen,B连接该服务器后,使用与A同一用户,键入screen -x命令,此时B能够实时看到A在screen中做的操作。