linux神技:screen命令管理远程会话

摘要:
二安装screenLinux服务器yuminstallscreen#Linux服务器Ubuntu服务器sudoapt-getinstallscreen#Ubuntu服务器三尝试screen新建screen窗口简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。在screen中创建一个新的窗口有这样几种方式:1直接在命令行键入screen命令screenScreen将创建一个执行shell的全屏session会话窗口。新建一个名叫test_screen的session,并马上进入。关键的地方来了,如何正确使用screen命令退出session会话,并保持程序后台正常运行呢?下一行是直接screen建立的session会话,没有名称。

使用场景


通常我们使用SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如爬虫、ftp 传输、文件备份等等。

通常情况下我们都是为每一个这样的任务单独新开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

如果你不想开那么多窗口,让任务正常在后台运行,那么你需要学习一下screen命令。常用的命令很简单。你会很快学会的。

二 安装screen


Linux服务器

yum install  screen    # Linux服务器

Ubuntu服务器

sudo apt-get install screen   # Ubuntu服务器

三 尝试screen 新建screen窗口


简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方式:

1 直接在命令行键入screen命令

screen

Screen将创建一个执行shell的全屏session会话窗口。

这种方法查看的话,只能通过进程ID(pid)查看,如果screen窗口很多,会因为进程ID太多而混淆。如果只有一个screen的可以用这种方法。

个人推荐使用第二种(即下面这一种),在查看sceen列表的时候,可以用screen名字来区分。

2 给新建的screen命名后打开

screen  -S   test_screen

-S 后面加新screen窗口的名称。新建一个名叫 test_screen的session,并马上进入。

以上两种方法会新建一个session会话窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该session会话的唯一窗口,该session会话退出,否则screen自动切换到前一个窗口。

3 screen 加 程序启动命令

screen python run.py #python 启动 名为run.py的脚本

Screen创建一个执行python run.py的单窗口会话,退出的话(ctrl + c),将退出该窗口/会话。

4 在已有的session会话,创建新的session会话

我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。

关键的地方来了,如何正确使用screen命令退出session会话,并保持程序后台正常运行呢?

四 screen退出和重新连接attach


1 screen的正确退出方法

C-a d 即 按住 Ctrl键 和 a键 点击 d键 (下同)

退出到进入前的shell窗口

查看所有screen建立的session会话,使用:

screen  --list

linux神技:screen命令管理远程会话第1张

上图 30033.test_screen 使用过 screen -S + 名字 新建的session ,30033是对应的进程ID(pid)。下一行是直接screen建立的session会话,没有名称。

Detached表示已经断开连接。但是保持在后端运行。

2 screen 的重新连接

screen  -r  进程ID        #screen  -r  30033 #或者
screen  -r   session名称    #screen  -r  test_screen

3 screen被中断的清理

linux神技:screen命令管理远程会话第2张

清理无效的session使用

screen -wipe

五 其他C-a绑定键和选项


1 C-a绑定键

C-a ?显示所有键绑定信息
C-a w显示所有窗口列表
C-a C-a切换到之前显示的窗口
C-a c创建一个新的运行shell的窗口并切换到该窗口
C-a n切换到下一个窗口
C-a p切换到前一个窗口(与C-a n相对)
C-a 0..9切换到窗口0..9
C-a a发送 C-a到当前窗口
C-a d暂时断开screen会话
C-a k杀掉当前窗口
C-a [进入拷贝/回滚模式

2 其他选项

-c file使用配置文件file,而不使用默认的$HOME/.screenrc
-d|-D [pid.tty.host]不开启新的screen会话,而是断开其他正在运行的screen会话
-h num指定历史回滚缓冲区大小为num行
-list|-ls列出现有screen会话,格式为pid.tty.host
-d -m启动一个开始就处于断开模式的会话
-r sessionowner/ [pid.tty.host]重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限
-S sessionname创建screen会话时为会话指定一个名字
-v显示screen版本信息
-wipe [match]同-list,但删掉那些无法连接的会话

下面附上 screen --help的信息:

Use: screen [-opts] [cmd [args]]
or: screen -r [host.tty]

Options:
-4 Resolve hostnames only to IPv4 addresses.
-6 Resolve hostnames only to IPv6 addresses.
-a Force all capabilities into each window's termcap.
-A -[r|R] Adapt all windows to the new display width & height.
-c file Read configuration file instead of '.screenrc'.
-d (-r) Detach the elsewhere running screen (and reattach here).
-dmS name Start as daemon: Screen session in detached mode.
-D (-r) Detach and logout remote (and reattach here).
-D -RR Do whatever is needed to get a screen session.
-e xy Change command characters.
-f Flow control on, -fn = off, -fa = auto.
-h lines Set the size of the scrollback history buffer.
-i Interrupt output sooner when flow control is on.
-l Login mode on (update /var/run/utmp), -ln = off.
-ls [match] or
-list Do nothing, just list our SockDir [on possible matches].
-L Turn on output logging.
-m ignore $STY variable, do create a new screen session.
-O Choose optimal output rather than exact vt100 emulation.
-p window Preselect the named window if it exists.
-q Quiet startup. Exits with non-zero return code if unsuccessful.
-Q Commands will send the response to the stdout of the querying process.
-r [session] Reattach to a detached screen process.
-R Reattach if possible, otherwise start a new session.
-s shell Shell to execute rather than $SHELL.
-S sockname Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title Set title. (window's name).
-T term Use term as $TERM for windows, rather than "screen".
-U Tell screen to use UTF-8 encoding.
-v Print "Screen version 4.01.00devel (GNU) 2-May-06".
-wipe [match] Do nothing, just clean up SockDir [on possible matches].
-x Attach to a not detached screen. (Multi display mode).
-X Execute <cmd> as a screen command in the specified session.

还可以参考的

GUN screen 官网

Screen的man page提供了最详细的信息

免责声明:文章转载自《linux神技:screen命令管理远程会话》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Permission failure: android.permission.CAPTURE_AUDIO_OUTPUT 解决办法MySQL数据库高并发优化配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.Net基础:ASP.NET中的session存储模式运用

在asp.net中的Session存储方式不象asp那样单一,一共提供了三种存储方式,由于最近一个2000多人使用的web软件出现了故障, 用户每天早上在某一时刻出现难以登陆现象,接着Session丢值出现,只有重启IIS,或机器.这时程序恢复正常了.整天都不会出现同样的问题 ,但是第二天依旧!这种现象持续了好几天,我检查了一下日志文件,高峰每秒访问人数大...

使用HQL查询

  HQL是Hibernate Query Language的缩写,语法很想SQL,但是HQL是一种面向对象的查询语言。SQL的操作对象是数据列、表等数据库对象,而HQL操作的是类、实例、属性。   HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按如下步骤进行:   1.获取Hibernate Session对象   2....

spring-session之二:简单配置

官方示例:https://docs.spring.io/spring-session/docs/current/reference/html5/#samples 配置Spring Session 在Web项目中配置Spring Session分为四步: 搭建用于Spring Session的数据存储 将Spring Session的jar文件添加到...

Oracle 连接、会话数的查看,修改

http://blog.csdn.net/xiaoyao6650/article/details/4027041 查看processes #当前的连接数 selectcount(*)fromv$process; #数据库允许的连接数 selectvaluefromv$parameterwherename='processes'; #查看连接配置信息 s...

用javascript实现禁止页面后退返回上一页的代码

用javascript实现禁止页面后退返回上一页的代码:有时候我们需要用户在点击了如下一步的按钮时,页面跳转到了下一个页面,这时想不允许用户返回后退到上一页,可以采用下面的方法:在需要跳转的页面(上一个页面),添加如下代码:<scripttype="text/javascript">history.go(1);</script>这时...

Android数据库相关整理

今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅。主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一、原生数据库写法一般要先继承自SQLiteOpenHelper写一个Helper。 public class DatabaseHelper extends SQLiteO...