看自己的进程占用了多少显存
抓取当前占用显卡的 PID 并打印详情
ps -fp $(nvidia-smi --query-compute-apps=pid --format=csv,noheader)\
(base) root@whu-lab:~# ps -fp $(nvidia-smi --query-compute-apps=pid --format=csv,noheader)
UID PID PPID C STIME TTY STAT TIME CMD
whu 3706 3437 0 9月21 ? SLsl 10:24 /usr/libexec/gnome-remote-desktop-daemon
whu 3419713 3419712 99 18:39 pts/1 Rl 20:37 /home/whu/miniconda3/envs/infoopt_dl/bin/python -u /home/whu/disk1/ITSL_stage4_prep_20261014_v2/snapshot/train.py
root 3433183 3433177 93 18:49 pts/8 Rl+ 3:23 python3 -m dgpm.cli vlm_baseline --config configs/vlm_b1_b3.yaml --output runs/V01_B1
zip
zip -r /保存的目标路径/xx.zip /要压缩的源路径
zip -r /home/user/backup/xx.zip /var/www/html
## 上述命令会带有长原始层级
# 方式 A:只打包 my_folder 文件夹本身
cd /path/to
zip -r /target/location/xx.zip my_folder
# 方式 B:打包当前目录下的所有内容(不包含最外层 my_folder 目录名)
cd /path/to/my_folder
zip -r /target/location/xx.zip .
优雅detatch
在进程已经开始运行且正在向终端刷屏幕的情况下,如果直接关终端,进程会收到 SIGHUP 信号被终止,且输出也会丢失。
你可以通过以下 3 步(无需重启进程),将其安全地放入后台,并防止终端关闭时被杀掉,同时把输出重定向保存到文件:
第一步:暂停当前任务并放入后台
-
在当前正在运行的终端中,按下键盘组合键:
Ctrl + Z
(此时屏幕会停止滚动,终端会提示[1]+ Stopped python xxx.py,任务被暂时挂起) -
输入以下命令,让它在后台继续运行:
bg(你会看到提示类似
[1]+ python xxx.py &,任务恢复运行) -
输入以下命令,防止终端关闭时该进程被杀死(关键步骤):
disown -h %1(如果你挂起的任务编号是
[1],就写%1;如果不知道编号,直接运行disown -h默认对最后一个任务生效)
第二步:将终端输出重定向到本地日志文件
因为进程启动时没有用 > 或 tee 重定向输出,此时它依然会往标准输出(已关闭的终端)写日志,导致日志丢失。你可以借助 Linux 提供的调试工具 reptyr 或 重定向文件描述符 来捕获后续日志。
最稳妥、不需要安装额外工具的方法是使用 reredirect 或直接用重定向工具,但如果没有 root 权限,最推荐安装一个小工具 reptyr(或者把已有输出用最简单的系统级方式接管):
推荐方案(如果有 sudo 权限,最优雅):
安装 reptyr 将已经运行的进程直接抓取进一个 screen 或 tmux 会话:
# 1. 安装 (Ubuntu/Debian)
sudo apt-get install reptyr
# 2. 新建一个 tmux 或 screen
tmux new -s my_train
# 3. 把已经后台运行的进程“偷”过来(替换为你训练进程的 PID)
reptyr <你的PID>
这样你不仅能随时关闭终端,甚至下次还能随时连回来(tmux attach -t my_train)继续看 tqdm 进度条实时刷新!
免安装快速方案(利用 GDB 重定向输出到文件):
如果服务器不能联网安装新包,但机器通常自带 gdb:
- 查看你的进程 PID(比如
123456)。 - 执行以下脚本,直接在内核层把进程的标准输出(fd 1)和标准错误(fd 2)重定向到
train.log:
gdb -p 123456 -batch \
-ex 'call close(1)' \
-ex 'call open("train.log", 66, 0666)' \
-ex 'call close(2)' \
-ex 'call dup(1)' \
-ex 'detach' \
-ex 'quit'
执行后,该进程之后所有的 print 和 tqdm 输出都会自动写入同目录下的 train.log 中。
第三步:安全关闭终端
完成上述操作后:
- 不要直接强行点右上角的
X(某些 SSH 客户端直接关窗口偶尔仍会导致断开信号透传)。 - 在终端中输入:
正常登出。exit
之后你想看日志,只需重新登录服务器,运行:
tail -f train.log
就能持续追踪日志了。
💡 下次启动时的预防经验(避免这么折腾):
下次再跑代码时,强烈建议一开始就养成使用tmux/screen或 后台运行命令 的习惯:nohup python -u xxx.py > train.log 2>&1 &(注:
-u参数非常重要,能禁用 Python 的输出缓冲,让tqdm和
评论区 (0)