1.存在的问题
我们常常需要连接远程服务器,在服务器上运行我们的程序,当程序运行时间不长的时候我们完全可以等待其运行完成。但当程序运行时间特别长的时候,我们和服务器的连接不可能一直建立,所以这个时候在后台进行程序的执行就会显得特别重要。一般情况下,我们使用ssh连接远程服务器时,如果由于网络问题或者其他问题造成连接中断,终端会收到 HUP(hangup)信号从而关闭其所有子进程,就会使我们的程序运行中断,这也不是我们想要的结果。
2.相关命令的介绍
Ctrl+c:该命令是强制终止程序的执行;
Ctrl+z:该命令是中断任务执行,但是该任务并没有结束,进程仍然存在只是被挂起的状态;
jobs:该命令用来查看后台被挂起的任务,命令执行后会显示进程对应的作业号,注意作业号和进程号是不一样的;
bg:该命令用来将挂起的命令继续在后台执行,相当于原来的命令加了&。使用时在后面加上对应的作业号;
fg:该命令用来将挂起的命令继续在前台执行,使用时在后面加上对应的作业号;
3.nohup命令
该命令的用途就是让提交的命令忽略 hangup 信号,使用的时候加在相应的命令前面就可以,一般情况下会结合&使用。
这种情况下就会使程序在后台运行,并且不会受到因为网络问题造成连接中断的影响,并且会将程序运行结果输出到nohup.out文件中。
4.结果输出到文件中
平常我们执行程序的时候都会将结果直接显示在前台终端界面,即使我们将程序在后台运行,程序的结果也还是会在界面上打印,如果我们不想受到这样的影响,可以是结果定向输出到文件中以方便后面的查看,具体的方法是使用>操作符,后面跟着结果文件,如果我们是想实现追加的效果就需要使用>>操作符。