在 Linux 下,当你关闭终端(例如退出 SSH 会话)后,程序停止的主要原因是 SIGHUP 信号(挂起信号)。默认情况下,当终端关闭时,系统会向当前会话中的所有进程发送 SIGHUP 信号,通知它们终端已断开连接,从而终止这些进程。
如果想在关闭 ssh 连接后,希望程序继续运行,可以使用 nohup,但是如果想要重新连上ssh后,还能查看原来程序的运行状态,nohup就不行了, 这个时候就需要使用screen来实现。
流行的Linux发行版通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载
screen使用命令
1. 启动 Screen 会话
screen
启动一个新的 screen 会话。会进入一个新的终端环境。
2. 启动带名称的会话
screen -S <会话名>
为当前会话命名,方便后续管理。
3. 分离会话(断开连接)
在 screen 会话中按下以下快捷键:
Ctrl + A,然后按 D
这会将当前会话挂起,但不会终止程序。
4. 查看所有会话
screen -ls
5. 恢复会话
恢复断开的会话:
screen -r <会话ID或名称>
例如:
screen -r 12345
或者:
screen -r my_session
6. 关闭会话
在 screen 会话中运行:
exit
7. 删除某个会话:
kill 27267
or
screen -S your_screen_name -X quit
8. 分屏管理
在 screen 会话中,你可以分割窗口:
Ctrl+a+w: 展示当前会话中的所有窗口;
Ctrl+a+c: 创建新窗口;
Ctrl+a+n: 切换至下一个窗口;
Ctrl+a+p: 切换至上一个窗口;
Ctrl+a+num: 切换至编号为num的窗口;
Ctrl+a+k: 杀死当前窗口;
8. 查看快捷键帮助
在 screen 会话中按:
Ctrl + A,然后按 ?
显示所有可用的快捷键。
常见场景:
-
远程任务不中断
使用 screen 启动一个长时间运行的任务,即使网络断开,任务也会继续运行,你可以重新连接后恢复会话。 -
多任务并行
在同一个 SSH 会话中管理多个任务或窗口,不需要开多个终端。 -
调试或日志查看
分屏功能适合同时查看多个日志或运行多个调试进程。