Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103683131
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-04 21:38:04

大家在使用SSH或telnet远程连接服务器时,可能都遇到为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。也许nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端, nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。

nohup  [argument…] &

虽然nohup很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂交互的程序就麻烦了。那么现在过来瞧瞧screen吧!

screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。当断开或关闭终端时,只要不杀死screen的进程,待重新连接后任能继续断开前的操作。

启动screen方式有两种,一种是直接在命令提示符下输入screen,这时Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。另一种方式是在screen命令后跟你要执行的程序,例如“ screen ftp”,Screen创建一个执行ftp命令的单窗口会话,退出ftp将退出该窗口/会话。

screen的语法格式如下:

screen [ -options ] [ cmd [ args ] ]

常用的选项有:

    -c file	使用配置文件file,而不使用默认的$HOME/.screenrc
    -d|-D [pid.tty.host]	不开启新的screen会话,而是断开其他正在运行的screen会话
  -h<行数>  指定视窗的缓冲区行数。
  -m  即使目前已在会话中的screen会话,仍强制建立新的screen会话。
  -r sessionowner/ [pid.tty.host]	重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限。
  -R  先试图恢复离线的会话。若找不到离线的会话,即建立新的screen会话。
  -s  指定建立新screen会话时,所要执行的shell。
  -S sessionname	创建screen会话时为会话指定一个名字
  -v  显示版本信息。
  -x  恢复之前离线的screen会话。
  -ls或--list  显示目前所有的screen会话。
  -wipe  检查目前所有的screen会话,并删除已经无法使用的screen会话。

screen常用的组合键描述如下:

例如当我们ssh登录服务器后,使用scp在传输大文件时,通常的情况就是要耐心的等待文件传输完成才能将终端关闭,那么下面来看看通过screen带来的方便。

首先使用ssh登录服务器,在命令提示符下输入screen:

# screen

在screen shell中输入scp命令,输入密码后开始文件传输。如果不愿意等待,那么直接按下”Ctrl+a+d”的组合键,或者关闭当前的终端,随便怎么操作,只要不杀死screen会话就行。

# scp -r images 172.16.78.111:~
root@172.16.78.111's password:
mondorescue.iso                                                  0%   22MB  22.2MB/s   00:01

使用screen -ls可以查看当前系统所打开的screen会话,如下:

# screen -ls
There are screens on:
        20642.pts-1.white       (Detached)
        20713.pts-1.white       (Detached)
2 Sockets in /tmp/screens/S-root.

若要其中的会话,则输入screen -r PID,如下:

# screen -r 20713

执行该命令后,马上就能看到刚才正在进行的scp命令的完成情况,是不是很方便?通过man screen可以看到更详细的screen的参数以及用法。

阅读(461) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~