1.问题的介绍最让程序员无法忍受的是,在使用终端的时候,ssh经常会因为网络断开,关闭屏幕,执行CTRL+C等原因,导致正在运行的程序退出,让我们的工作功亏一篑.其背后的主要原因在于上述相关操作。默认情况下,shell会向与终端会话关联的进程发送中断信号,导致进程跟随终端退出。为了理解这个问题,首先要理解两个中断信号:1)sigint:信号中断,ctrl+c会发送这个信号主动关闭程序2)sighup:信号挂断,关闭终端,网络断开,并关闭屏幕将发送此挂断信号。今天就给大家介绍一下如何在Linux中执行几个后台任务来避免以上问题的发生。2&Symbol这是一种把&放在执行命令末尾的方法,这样启动的程序就会忽略sigint信号。这时候执行ctrl+c关闭进程不会关闭进程,但是在熄屏断网的情况下,进程还是会退出。shtest.sh&3.nohup命令nohup(nohangup),表示不挂断操作。使用nohup运行命令可以使命令永远执行。它与用户终端无关。断开SSH连接不影响操作。nohup捕获SIGHUP并进行了Ignore处理,所以在熄屏、断网等情况下进程不会退出,造成ssh中断。但是ctrl+c可以关闭进程。所以在大多数情况下,同时使用nohup和&启动的程序,ctrl+c关闭终端是无法关闭的。默认情况下,所有输出都重定向到名为nohup.out的文件。nohup命令的基本格式:nohupCommand[Arg...][ &]例如后台不间断执行./test.sh,stdout输出到out.log,stderr输出到err.lognohup./test.sh>out.log2>err.log&相关数字的含义如下:0-stdin(标准输入),1-stdout(标准输出),显然nohup命令>out.log等同于nohup命令1>out.log,这是默认行为。2–stderr(standarderror)你可能还会看到这种写法,意思是将stderr重定向到stdinnohup./test.sh>out.log2>&1&4.ctrl+z,jobs,fg,bg如果我们的程序在启动时,&没有用到,nohup呢,难道我们需要执行ctrl+c终止在前台执行的进程的执行,然后再重启,显然是有好办法的!4.1ctrl+z把一个正在前台执行的job进程放到后台,挂起。用术语来说,它是暂停的。执行后如下:[1]+Stopped./test.sh4.2jobs查看后台命令中当前运行了多少个作业,[jobnumber]为作业编号。jobs[1]+Stopped./test.sh[2]+Running./test2.sh&4.4bg会继续运行后台暂停(suspended)的job进程,比如1号job(./test.sh)放到后台运行,注意看到&bg1[1]+./test.sh&4.3fg已经被带入,将后台的job进程调到前台继续运行,例如,将2号作业(./test2.sh&)调到前台运行fg2./test2.sh5.screen命令5.1简介如果以上方法通过linux相关命令实现前后端任务调度,那么屏幕提供了另一种思路。非人版:GNUScreen是GNU项目开发的一款用于命令行终端切换的免费软件。用户可以通过软件同时连接到多个本地或远程命令行会话,并在它们之间自由切换。GNUScreen可以被认为是窗口管理器的命令行界面版本。它为管理多个会话提供了统一的接口和相应的功能。口语版:我们可以粗略的认为screen是一个虚拟终端软件,它直接启动linux系统中的另一个后台程序来接管(维持)你的终端会话。当直接连接的终端ssh断开时,仍然会让程序认为你的ssh一直连接着,这样进程在收到中断信号后不会退出。5.2安装yuminstallscreen5.3使用1)Createanewsessionscreen-Syourname->Createanewsessioncalledyourname2)Listallcurrentsessionscreens-ls3)Restorethesession(backtoyournamesession)screen-ryourname4)detachasessionscreen-dyourname->remotedetachasessionscreen-d-ryourname->endthecurrentsessionandreturntoyournamesession5)删除会话屏幕-Spid-Xquit
