加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

如何用screen后台运作程序

发布时间:2022-01-12 08:24:18 所属栏目:系统 来源:互联网
导读:这篇文章的内容主要围绕如何用screen后台运行程序进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获! 用screen 在后台运行程序 我们常需要SSH 或者telent 远程
  这篇文章的内容主要围绕如何用screen后台运行程序进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!
 
  用screen 在后台运行程序
  我们常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。这时,我们可以用screen命令解决这个问题。
 
  screen命令可以实现当前窗口与任务分离,我们即使离线了,服务器仍在后台运行任务。当我们重新登录服务器,可以读取窗口线程,重新连接任务窗口。
 
  一:主要功能
 
  会话恢复
 
  只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
 
  多窗口
 
  在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
 
  会话共享
 
  Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
 
  GNU’s Screen 官方站点:http://www.gnu.org/software/screen/
 
  二:screen 的使用
 
  1,安装
 
  1)一般的linux系统都会自带screen,如果没有安装的话,使用
 
  yum -y install screen
 
  2)语法
  $> screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
 
  -A  将所有的视窗都调整为目前终端机的大小。
  -d   <作业名称>  将指定的screen作业离线。
  -h   <行数>  指定视窗的缓冲区行数。
  -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
  -r   <作业名称>  恢复离线的screen作业。
  -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
  -s  指定建立新视窗时,所要执行的shell。
  -S   <作业名称>  指定screen作业的名称。
  -v  显示版本信息。
  -x  恢复之前离线的screen作业。
  -ls或--list  显示目前所有的screen作业。
  -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。
 
  2,新建窗口
 
  新建一个窗口有3种方法:
 
  screen        这样就可以新建窗口,进入到一个窗口中,但是这样窗口就没有名字,无法区分他们
 
  screen -S name      这样新建一个名字为name的窗口,并入到该窗口中
 
  例如:screen -S count      新建了一个叫count的窗口并进入,可以开始执行命令
 
  例如:screen python ./a.py 新建并执行a.py程序
 
  3,会话分离
 
  我们在一个窗口运行某个程序之后,想退出登录关闭screen进入的窗口干点别的事,让程序在后台运行。这时就需要和窗口会话分离,有2种方式:
 
  1)快捷键Ctrl a表示进入命令模式
 
  在当前会话窗口中按Ctrl a +d快捷键可以实现分离,这时窗口会弹出[detached]的提示,并回到主窗口。
 
  2)screen -d name #远程detach某个session,前提是已经跳出了name窗口
 
  这样妈妈再也不用担心我们关掉terminal程序就不运行了。
 
  4,恢复会话窗口
 
  首先查看有哪些窗口正在运行
 
  screen -ls                                         #列出窗口列表     显示如下
 
  There are screens on:
  1942.cout   (Detached)
  1848.name   (Dead ???)
  Remove dead screens with 'screen -wipe'.
  2 Sockets in /var/run/screen/S-root.
 
  screen -r 1942 #进入1942线程,恢复count会话窗口      或   screen -r count
 
  这样就能回到count窗口了
 
  5,杀死会话窗口
 
  如果想关掉一个多余的窗口,有3种方法:
 
  1)kill -9 1848 例如在上面的2637,kill -9 1848 即可杀死线程,当然就杀死了窗口
 
  2)使用Ctrl a +k 杀死当前窗口和窗口中运行的程序
 
  3)使用Ctrl a 然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序
 
  6,清除死去的窗口
 
  当窗口被杀死后,再用screen -ls 可以看到该窗口后面的(???dead)字样,说明窗口死了,但是仍在占用空间。这时需要清除窗口
 
  screen -wipe              #自动清除死去的窗口
 
  这样的窗明几净了~
 
  三:screen 的其他参数及应用
 
  在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
 
  C-a ? -> 显示所有键绑定信息
 
  C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
 
  C-a n -> Next,切换到下一个 window
 
  C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows)
 
  丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process
 
  (无论是前台/后台)都在继续执行,即使 logout 也不影响。
 
  C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
 
  C-a w -> 显示所有窗口列表
 
  C-a t -> time,显示当前时间,和系统的 load
 
  C-a k -> kill window,强行关闭当前的 window
 
  C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
 
  C-b Backward,PageUp
 
  C-f Forward,PageDown
 
  H(大写) High,将光标移至左上角

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!