引言
设想有一种情况,在ssh服务器训练/推理的时候,突然断线,再次打开ssh的时候,发现后台在运行,此时无法使用 ctrl+c 终止,从而,可以用一个很简单的办法来结束:手动关闭进程。
方法
输入 nvidia-smi,看到:
这个PID就是进程的编号,但目前面临一个问题,如图所示,有2个训练/推理的进程,我们不知道“到底哪个进程是需要关闭的”,所以,需要大概回忆一下,我们是什么时候开始训练/推理的,然后查看这两个进程开启的时间,这样就能对应上了。
在终端输入:
import psutil
# 获取要查询的进程的进程 ID
pid = 159957
# 获取进程对象
process = psutil.Process(pid)
# 获取进程创建时间
create_time = process.create_time()
# 将时间戳转换为可读的时间格式
from datetime import datetime
create_time_str = datetime.fromtimestamp(create_time).strftime('%Y-%m-%d %H:%M:%S')
# 输出进程创建时间
print("进程 %d 的创建时间是 %s" % (pid, create_time_str))
可以看到输出:进程 159957 的创建时间是 2023-07-30 12:37:33
如果能对应上,那说明这个进程就是需要kill的,如果不能,那就是另一个。
接着,在终端输入:
import os
import signal
# 获取要关闭的进程 ID
pid = 159957
# 发送 SIGTERM 信号终止进程
os.kill(pid, signal.SIGTERM)
搞定。