今天在CentOS上运行了一个CUDA程序,由于需要同时进行其他操作,就把它放到后台执行了。此程序在执行完毕之后会要求用户按任意回车符才退出(兼容windows的console程序),当提示出来的时候也没在意,敲击回车提示就结束了。

没多久再次运行其他的CUDA程序,却提示有错误,一看是无效的参数。之前也出现过这样的提示,直接重启就OK了。这次又复现了,心想非得找出原因不可。

于是想到了上次接触到的nvidia-smi工具,查看了一个GPU使用,我去,怎么好几个进程还都占着GPU内存没释放。心想是不是写的程序没释放GPU资源,回去检查一看确实是释放了啊。调出信息来再次看一遍,看到有进程号,心想难道是这些进程还没有结束?使用ps 和 grep 一看,我去,还真是!

原因找到了,那么使用 fg 将程序一个个掉至前台,然后再结束就可以了。再次使用 nvidia-smi 工具查看使用率,资源和内存使用都正常了。

那么再看看 fg, bg 和 jobs 这几个命令。 fg 是将后台程序调至前台, bg 则将程序放置后台运行, jobs是查看当前的后台进程。其中造成这次坑爹的是bg, 其在后台运行,如果输出使用的是标准输出,信息还是会打印到终端上。但是其是后台程序,不能接受标准输入,所以像我这样的进程就没有正常退出,导致了悲剧。

算是挖了一个坑,终于又填好了。