共计 3631 个字符,预计需要花费 10 分钟才能阅读完成。
这篇文章的内容主要围绕如何用 screen 后台运行程序进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随丸趣 TV 小编一起阅读吧。希望大家通过这篇文章有所收获!
用 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 p – Previous,切换到前一个 window
C-a 0..9 – 切换到第 0..9 个 window
Ctrl+a [Space] – 由视窗 0 循序切换到视窗 9
C-a C-a – 在两个最近使用的 window 间切换
C-a x – 锁住当前的 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,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] – paste,把刚刚在 copy mode 选定的内容贴上
screen 高级应用
会话共享
还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个 screen 会话,你朋友可以在他的终端上命令:
[root@TS-DEV ~]# screen -x 这个命令会将你朋友的终端 Attach 到你的 Screen 会话上,并且你的终端不会被 Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又 处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口 中去,那还是可以分别进行不同的操作的。
会话锁定与解锁
Screen 允许使用快捷键 C -a s 锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被 Screen 中的进程接收到。快捷键 C -a q 可以解锁一个会话。
也可以使用 C -a x 锁定会话,不同的是这样锁定之后,会话会被 Screen 所属用户的密码保护,需要输入密码才能继续访问这个会话。
发送命令到 screen 会话
在 Screen 会话之外,可以通过 screen 命令操作一个 Screen 会话,这也为使用 Screen 作为脚本程序增加了便利。关于 Screen 在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对 Screen 的操作:
[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com 这个命令在一个叫做 sandy 的 screen 会话中创建一个新窗口,并在其中运行 ping 命令。
感谢你的阅读,相信你对“如何用 screen 后台运行程序”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注丸趣 TV 网站!丸趣 TV 小编会继续为大家带来更好的文章!