文章目录
- 1. 一定要用 Ctrl + C 结束程序
- 2. 如何杀死后台僵尸 (defunct) 进程
- 2.1 查看 defunct 进程
- 2.2 杀死 defunct 进程的父进程
1. 一定要用 Ctrl + C 结束程序
Ctrl+Z 和 Ctrl+C 都可以中断程序,但他们却有很大的差异,主要体现在:
- Ctrl+C: 强制 中断程序的执行 ,这个时候程序就 已经释放内存 ,运行结束。
- Ctrl+Z: 将 程序暂停 ,但并没有释放内存 ,此时在的进程是挂起转态,可以使用 fg 和bg 命令 前台或 后台 继续该任务。
参考:通俗易懂的告诉你:Ctrl+C 和 Ctrl+Z 的区别
但很多时候由于 Ctrl+C 失效(如在 tmux 中),我们只能被迫使用 Ctrl+Z 将程序暂停,然后再手动结束进程。
2. 如何杀死后台僵尸 (defunct) 进程
使用 Ctrl+Z 结束的进程只是暂停了,依然会占用 GPU 显存,使用 kill -9 PID 也无法将其杀死。
2.1 查看 defunct 进程
查看当前运行的 python 进程:
ps aux|grep python
查看系统中是否存在 defunct 进程:
ps aux|grep defunct
可以看到此时确实存在 defunct 进程:
root 4541 0.0 0.0 0 0 pts/8 Z 11:42 0:00 [python] <defunct>
root 5182 0.0 0.0 4140 2132 pts/8 S+ 11:56 0:00 grep --color=auto defunct
2.2 杀死 defunct 进程的父进程
想要杀死 defunct 进程,只能通过重启系统或杀死其父进程实现。
查看 defunct 进程的父进程:
ps -ef|grep defunct|more
结果如下:
UID PID(进程) PPID(父进行) ...
root 4541 4304 0 11:42 pts/8 00:00:00 [python] <defunct>
root 5187 460 0 11:58 pts/8 00:00:00 grep --color=auto defunct
只需要杀死 PPID 就可以结束 defunct 进程:
kill -9 4304
此时再用 nvidia-smi 查看,显存占用已经被清空了。