Linux 下 screen 使用恢复问题

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 区别


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 linux教程screen 的文章

 本文最后更新于 2018/01/29 16:24:13,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 系统 > Linux 下 screen 使用恢复问题

精选评论

  1. zvv

    为什么我在首页点这篇文章的标题进不来这篇文章,是个xx图。 我点图片才进来的。

    1. VirCloud
    2. VirCloud

      oh my god,这两天改主题了,没注意看 icon_eek.gif,马上改 icon_exclaim.gif