昨晚ssh连接4070s上跑代码,执行了训练脚本之后就去睡觉了。我忘了休眠之后网络会断开,终端停止连接,所以训练没跑完,以后要记得后台执行脚本,我之前用的命令一直是nohup python script.py > output.log 2>&1 &,下面详细整理下参数并多记录一种方法。
方法1:nohup※
- 运行命令:nohup python -u script.py > output.log 2>&1 &
- nohup:no hangup,可以让程序后台运行,即使关闭终端,程序也不会停止。
- -u:表示不带缓冲,加上这个可以第一时间看到log里的结果,log内容输出是一条条的,不加的话log内容输出是一坨坨的。
- > output.log:将输出保存到output.log文件中,很好理解。>是直接覆盖到文件,>>是追加到文件。
- 2>&1:将标准错误输出也重定向到output.log,在linux中0是标准输入,1是标准输出,2是错误标准输出。
- &:表示后台执行
- 停止脚本:先查找脚本 ps aux | grep script.py,然后kill <PID>即可。
- 总结:后台执行script脚本,将所有输出信息写入log文件,并且关闭终端后程序仍继续运行。
方法2:screen/tmux※
- screen是一个终端管理工具,可以让程序在独立的会话中运行,断开ssh后仍保持连接,tmux与其类似。
- 安装:sudo apt install screen
- 创建新会话:screen -S new_session
- 运行脚本:在新会话中运行脚本 python script.py
- 安全退出对话:Ctrl+a,然后按d(detach),会话会分离,程序仍会运行。
- 重新连接:查看当前会话screen -ls;重新连接screen -r new_session
- 删除对话:
- 在会话中,直接Ctrl+d,相当于delete
- 在会话中,exit
- screen -ls,然后kill -9 pid
- 关闭会话:screen -X -S new_session quit (强制删除,一般不用)

2024年12月25日※
更:
最近用screen比较多,感觉比nohup好用,一般就用到两个命令:
# 连接screen,连接后台的screen,如果没有就创建一个
screen -xRR
# 退出,其实不算是命令
ctrl+a→d
2025年5月8日 02点43分※
更:
在 screen 中,Ctrl + A 是 命令前缀(也叫 控制键),它用来启动 screen 的命令模式。当按下 Ctrl + A 后,可以按其他键来执行 screen 的特定命令。 具体的操作:
- Ctrl + A:这告诉 screen,接下来的按键是命令而不是输入。按下 Ctrl + A 后,screen 会等待其他键按下来执行相应的命令。
常用的 Ctrl + A 后续命令:
- Ctrl + A + D:分离会话(detach)。这会将当前的 screen 会话放到后台运行,你可以继续使用终端,而会话仍在后台运行。如果你之后想重新连接会话,可以使用 screen -r 命令。
- Ctrl + A + C:创建新的窗口。在 screen 中,你可以有多个会话窗口,按 Ctrl + A 后按 C 会创建一个新的窗口。
- Ctrl + A + N:切换到下一个窗口。如果你有多个窗口,按下 Ctrl + A 后按 N 可以切换到下一个窗口。
- Ctrl + A + P:切换到上一个窗口。按 Ctrl + A 后按 P 可以返回到上一个窗口。 Ctrl + A + ":列出所有窗口。按 Ctrl + A 后按 " 可以显示当前所有窗口的列表,允许你选择并切换到任何一个窗口。
- Ctrl + A + K:关闭当前窗口。按 Ctrl + A 后按 K 会关闭当前的 screen 窗口。
- Ctrl + A + S:水平拆分窗口。会将当前窗口分成上下两部分,你可以在每个区域中运行不同的命令。
- Ctrl + A + |:垂直拆分窗口。这会将当前窗口分成左右两部分。
- Ctrl + A + Q:关闭所有拆分的窗口。如果你之前使用了 Ctrl + A + S 或 Ctrl + A + |,你可以用这个命令关闭所有拆分的窗口,恢复原始视图。
- Ctrl + A + X:锁定屏幕。锁定当前会话,需要输入密码才能解锁。