Linux下使用screen命令实现后台长时间运行程序

大家都知道Linux的SSH连接并不像Windows可以执行多任务,至少在没有使用到类似今天的主角screen时是这样。一般情况下我们通过SSH连接我们的Linux服务器时,只能执行一个命令或者程序,然后如果这个程序一直执行的话,就会一直显示这个程序的运行状态。假如我们想像桌面一样,可以运行A程序,然后最小化,然后接着运行B程序,C程序,D程序……那该怎么实现呢?


今天我们就来讲解一下screen命令的使用,screen命令是linux下的一种多重视窗管理程序。那么哪些情况下需要使用它呢?

1、通过SSH正常执行一个程序,然后中途断网或者SSH断开了,那么程序就中止了,但是假如我们想在断网后程序也继续运行呢?

2、通过SSH运行一个程序,然后我们想把这个程序放到后台继续执行,然后前台界面执行其它程序时

3、通过SSH运行一个程序,然后需要断开SSH,但是程序不停止运行,这一点有点类似第一点


以上几种情况就是最常见的需要使用screen的情况,而这几种情况无非都是针对一个目的:那就是让程序在后台执行!


首先我们先来安装screen,在Centos下,执行yum install screen -y


安装完成后,我们先来看看常用的参数有哪些?一般情况下,我常用的参数就三个:-URd


下面用到的时候我会分别讲解这三个参数的作用


我们先来看看screen如何使用,正常情况下,我们直接输入screen命令即可。输入完后,貌似没有任何反应?


试试按下键盘的Ctrl + a,然后松开,再按下?键,看看是不是显示了如下界面?

1.jpg

如果是,则说明我们已经成功的进入到了screen模式。按下键盘的空格键或者回车键退出这个说明界面。


上面这个界面就是screen的快捷键说明。所有的快捷键都是基于Ctrl + a的,即所有操作都要先按下Ctrl + a,然后再松开。比如显示上面的这个界面,快捷键就是Ctrl + a,松开,然后再按下问号?键。


好了,那么现在我们进入到screen模式了,我们能干啥呢?我们可以跟平时一样执行命令了。例如我这里有一个php脚本,每2秒输出一次当前时间,我现在执行它:php index.php,然后可以看到效果如下:

2.jpg

然后现在我发现我有其它时间要做,但是我不想停掉这个脚本的运行,那么我现在按下Ctrl + a,然后松开,再按下d键,跳出screen模式,可以看到提示:

3.jpg

这个提示是告诉我们,我们从screen模式退出来了,然后有一台任务在后台运行中,进程的id是2177。


我们可以使用screen -ls命令查看当前有哪些任务在后台运行中,例如:

4.jpg

从上图可以看出,我们有一个任务在后台运行中,进程id是2177,这个正是我们刚刚运行php脚本那个任务。现在我们输入screen -r 2177,恢复到刚刚那个任务界面,可以看到:

5.jpg

我的脚本还在不停的运行中,并没有停止。


我先来解释一下screen -r 2177这个命令,这个命令是指恢复到指定的任务,而这个任务的id是2177。假如我们想停止这个脚本的运行,那么只要像平时普通SSH模式下一样按下Ctrl + c即可。


当我们想完全退出这个screen任务的时候,先按下Ctrl + c将当前运行的命令或者程序停止,然后再按下Ctrl + d即可终止任务。终止后可以看到如下提示,并且使用screen -ls也查看不到刚刚的任务。

6.jpg


那么至此为止,我们应该知道了screen的用法对吧?回到文章一开头介绍的几个参数-URd,那么这几个参数有什么用呢?

参数U:指定screen任务使用UTF-8编码

参数R:恢复到指定的screen任务,假如这个任务存在的话,如果不存在则新建一个screen任务(相当于直接执行screen命令)

参数d:假如有其他人在screen任务界面,则将这个人踢出来,相当于强行给那个人按下Ctrl + a,松开,然后按下d的操作。这种情况一般出现在什么时候呢?就是当一个人连接SSH,然后进入到screen模式下,然后另一个也连接了这个SSH,并且通过-r参数恢复到同一个screen任务的时候,就可以使用-d参数,将先进入screen任务的那个人踢走。


一般情况下我是这么用的:

screen -URd 任务名称


例如:screen -URd php

那么这样我就创建了一个名字叫php的任务,以后我要恢复到这个任务的时候就不需要查询这个任务的进程id,我可以直接再执行一次screen -URd php就恢复到这个任务的界面了。


下面看一下演示,同样是执行先前那个显示时间的php脚本。我们先执行screen -ls查看有没有在执行的任务先

7.jpg

很好,没有任务在运行。下面我们执行screen -URd php,当我们第一次执行的时候,因为名字叫php的这个任务并不存在,所以会新建一个screen任务,名字为php,当第二次执行这个命令的时候,因为我们已经创建了一个叫php的任务,所以会直接进入到这个任务的界面。

8.jpg

当我们进入名字叫php的任务后,执行php脚本,然后按下Ctrl + a,松开,按下d,隐藏任务界面。然后可以看到提示信息:detached from 2216.php

2216就是进程id,php就是我们取的名字。

通过screen -ls也可以看到当前运行中的任务情况。然后我们再次执行screen -URd php,是不是又恢复到我们的任务界面了?同样的,我们也可以试试screen -r 2216或者screen -r php,这两种方法都可以恢复到我们的任务界面。


是不是感觉很神奇呢?有了screen命令后,我们也可以通过SSH来执行多任务了。大家学会怎么用了吗?


最后再次提醒大家:如何判断当前是在普通SSH命令模式还是在screen模式下呢?我们只要按下Ctrl + a,松开,再按下问号?键,如果显示screen的快捷键说明界面,则说明我们当前是在screen模式下,反之则说明我们在普通SSH命令模式下。

  1. 本网站所收集的部分资料来源于互联网,本站不对其真实性负责,也不构成任何其他建议。如果您发现有侵犯您权益的内容,请与我们取得联系,我们会及时修改或删除。
  2. 传递知识、传递力量,欢迎各位网友对本站的文章进行转载和分享。
  3. 本站QQ群交流群:904314688  群号:904314688
发表评论
 
评论列表(目前共有 条评论)
暂时还没有评论哦~

文章搜索

商家广告


版权所有:秋风雅居 (www.198933.com) ©2024 All Rights Reserved.

粤ICP备20031662号