我今天下班后发现有人在共享机器上使用了不合理的内存和GPU内存,而他们在度假时留下了一个运行的进程。我知道他们备份他们的结果,脚本可以随时恢复,所以我想杀死它来运行我自己的东西。
服务器运行的是2009年7月9日的CentOS版本。
如果重要的话,我想杀死的脚本是运行PyTorch和TensorFlow训练脚本,它们启用了检查点。
我尝试过的一种方法是分配太多内存,以至于其他进程只需正常运行就可以获得OOM,但并不太成功。
l = []
n = int(1e5)
import time
while n > 0:
try:
l.append(' ' * n)
except:
n //= 8
time.sleep(10)
它会很快填满内存并交换,但不会停留太久。问题似乎是,Linux并没有引发异常并触发except
子句,而是终止了进程,只显示了一行:
Killed
我不知道这是否是最好的方法,但这至少是我尝试过的。
I服务器管理得当,您不能:
- 任何一个进程都不应该被允许占用所有可用内存,因为应该限制用户的操作
- 任何像样的多用户系统都不会允许非管理员用户杀死别人的进程
这是安全方面的基础知识。但是,如果你认为你的同事滥用系统资源,并因此阻止其他用户工作,你应该能够向管理团队发送消息解释这一点他们当然可以杀死这个过程,但你不能。