Linux 中的 screen 命令是一个很强大的工具,能够在一个终端连接断开以后仍然能够保持任务的运行。
举个例子来说,我们通过 ssh 远程登录到 Linux 服务器上执行某个任务,这个任务需要很长的时间才能执行完成,比如需要 5 个小时,而这时你碰巧要下班了,不能等程序执行完成再走,也不能不关电脑就走,这种场景下,screen 就可以派上用场了。
但是遇到这样的问题,screen 运行中意外断开 ssh,screen -r <session-id>
却发现连不上,用 screen -ls
显示当前的状态为 Attached, 但实际上当前并没有用户使用会话,正确状态应该为 Detached。
解决办法
列出所有 session:
# screen -ls
然后踢掉前一用户,即可登陆:
# screen -D -r <session-id>
附:screen 命令常用用法
① 新建会话
# screen -S yourname // 新建一个叫 yourname 的 session
② 退出会话
screen 里直接输入 exit 退出,或者快捷键 Ctrl+a k,还可以不进入会话退出:
# screen -S yourname -X quit
③ 保持会话(退出 screen 界面,但保留 session)
键盘上按 Ctrl+a d,会话状态变为 detach
④ 恢复状态为 detach 的会话
列出所有会话:
# screen -ls
找到 session id 后:
# screen -r session id
或
# screen -r NAME
⑤ 清除状态为 dead 的会话
# screen -wipe
⑥ 共享会话
# screen -x
注:可同时操作,相当于显示器了。
⑦ 锁定解锁会话
无密码快捷键锁定:Ctrl+a s
有密码(用户密码):Ctrl+a x
解锁:Ctrl+q
⑧ 屏幕分割
水平分割快捷键:Ctrl+a S
垂直分割快捷键:Ctrl+a |
取消焦点分区分割:Ctrl+a X
取消所有分割: Ctrl+a Q
注:session 仍然还在,只是关闭了分区显示
相关阅读:
CTRL+C 与 CTRL+Z
ctrl-c: ( kill foreground process ) 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行;
ctrl-z: ( suspend foreground process ) 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程,而并非结束进程,用户可以使用 fg 命令在前台恢复执行被挂起的进程,或者 bg 命令在后台恢复执行被挂起的进程。
参考文章:
1、《使用screen在后台跑程序,screen session的状态为Attached》
2、《linux screen 命令详解》
3、《Linux中删除全部的screen任务》
4、《Linux中ctrl-c, ctrl-z, ctrl-d 区别》
Windows 7Chrome 55.0.2883.87来自 浙江 的大神
为什么我在首页点这篇文章的标题进不来这篇文章,是个xx图。 我点图片才进来的。
oh my god,这两天改主题了,没注意看 ,马上改
改好了