All things are difficult before they are easy. 没有软件的裸机是一具僵尸,没有硬件的软件是一个幽灵。2012,专注于Linux和C语言,关注自动化、性能测试,关注开源社区和开源测试工具、方法,尝试测试团队管理!
screen和nohup简介(Linux中让程序在后台继续运行)
上一篇 /
下一篇 2011-06-26 21:59:55
/ 个人分类:Linux
我的原文发表于:
http://renyongjie668.blog.163.com/blog/static/1600531201152691058210/在实际工作中,我们ssh等到远程的Linux上,运行一个程序,但是当我们关闭掉我们的连接终端断开ssh后,刚才运行着的程序也会自动被中断结束。当ssh连接断开后,如何让我们的程序继续在后台运行呢?下面介绍我常使用的两个方法。
使用nohup让程序在后台继续运行
常用命令:nohup ./test.sh & 【如果运行成功则默认会将标准输出重定向到当前目录的nohup.out文件中,当然可以自己重定向输出信息】
当需要将nohup后台运行的程序调到前台时,先jobs命令查看后台job编号,用 fg %n命令可以调回到前台运行(n是job的编号)。
PS:单独的&时可以让命令后台运行的,知识如果ssh会话断掉,&的命令也会自动退出。
screen让程序后台执行--一个强大的工具
简
单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多
个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方
式:
1.直接在命令行键入screen命令
[root@localhost ~]# screen
Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。
2.Screen命令后跟你要执行的程序。
[root@localhost ~]# screen vi test.c
Screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口/会话。
3.以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。
给
screen发送命令使用了特殊的键组合C-a(Ctrl+a)。这是因为我们在键盘上键入的信息是直接发送给当前screen窗口,必须用其他方式向
screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。这种命令形式在screen中叫做键绑定(key
binding),C-a叫做命令字符(command character)。
可以通过C-a ?来查看所有的键绑定,我常用的键绑定有:
C-a ? 显示所有键绑定信息
C-a d 暂时断开screen会话
C-a k 杀掉当前窗口
C-a w 显示所有窗口列表
我的通常的真实使用场景如下:
ssh登录我的Linux服务器,screen ./test.sh 运行一个shell脚本,按键C-a d(先按Ctrl+a 再按d键)暂时断开screen会话;然后干别的事情(比如,散散步/打打乒乓球)去了(可能ssh连接已经被断开)。
过一会儿,回来重新登录,然后
screen -ls #显示所有的 screen sessions (C-a d后的session为detached状态)
screen -r [keyword] #找到我想要 screen session 恢复回来 (捡回来)
若 screen -ls 有 Attached sessions, 如果想要使用它,可以这样来做
screen -d [keyword] #强制 detach,以便用screen -r 「接手」过来
PS: screen功能很强大的,我通常也就使用了上面的基本功能。更多的,请看参考资料或者man screen
参考资料:
http://www.21andy.com/blog/20071121/677.html
http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
http://blogold.chinaunix.net/u1/37553/showart_341863.html
收藏
举报
TAG:
Linux
linux
nohup
screen
后台