经常运行一个程序时,表面上已经终止了,实际上还在后台运行。一来呢,它可能占据端口,导致端口复用的时候报错。二来呢,它可能占用GPU,让你显存直接少一块。
尤其是在多进程程序,假如运行“python train.py”,直接后台起了8个进程,你需要终止这些进程的话,你可以用最原始的方法:
ps -ef | grep "python train.py"
# 8 个 pid
kill -9 <pid> # 运行8次
很直接,但是不够优雅。而且效率低下。你可以这样:
kill -9 $(pgrep -f "python train.py")
一行命令,就能终止所有的相关进程。用这个命令时需要特别小心,确保不伤及无辜进程。
为了更优雅一点,我们可以把这行命令写到bashrc或者zshrc里:
vim ~/.bashrc
# paste the following
mykill() {kill -9 $(pgrep -f "$1")
}
source ~/.bashrc
然后,我们就可以:
mykill "python train.py"
这样就很优雅了~