ssh与telnet远程登录到Linux服务器的时候,经常需要执行一些运行时间较长的任务,但是为每一个任务开一个ssh会话窗口或telnet远程端口,会比较麻烦,并且对于运行时间比较长的任务,如果关闭窗口,任务就会中断。
对于不同的情形可以使用不同的解决方案:
1、只是将任务以后台方式运行,中间不会中断会话窗口。
这时候可以在任务后加&符号就可以将任务以后台方式运行,接下来就可以继续进行其他操作。
2、任务所有的输出为输出到窗口的标准输出
可以使用在任务前面加nohub,这样即使关闭了会话窗口,任务继续运行,可以使用jobs查看所有后台运行的任务,
fg %N可以杀掉该任务,N 为执行jobs命令后,结果中每一个任务的id。
3、对于比较复杂的情况就要使用screen
#screen命令创建一个新的执行shell的窗口,在这个窗口中可以运行所有的shell命令。
#screen vi /etc/passwd 是在新的窗口中执行vi命令,如果这时候想去做其他事情就可以使用ctrl+a+d组合键,将该任务独立化,及时ssh中断也不会影响任务的运行。其中ctrl+a可以将我们在键盘上键入的信息直接发送给screen,screen默认接受以CTRL+a开始的命令,这种情况较做键绑定,其中ctrl+a叫做命令字符。
其他与ctrl+a组合(简写为c-a)命令如下所示
c-a ? 显示所有键绑定信息
c-a w 显示所有窗口列表
c-a c-a 切换到之前显示的窗口
c-a c 新建一个可以执行shell命令的窗口并切换到该窗口
c-a n 切换到下一个窗口
c-a p 切换到前一个窗口
c-a 0..9 切换到窗口0..9
c-a a 发送c-a到当前窗口
c-a d 暂时断开当前screen窗口会话
c-a k 杀掉当前窗口
c-a 【 进入拷贝/回滚模式