在服务器上长时间运行程序的一些基本命令

时间:2022-09-17 08:48:35

1. 终端复用

tmux是强大的终端复用工具,在服务器上长期运行程序,tmux是必备的工具。其好处当我们退出服务器时(主动退出或因网络连接不好而断开),使用tmux可以保存之前的工作状态。另外,当我们强制或主动断开服务器连接时,如果长时间要跑的程序还在运行,程序很可能会自动停止运行。使用tmux就可以避免这样的情况发生,只要不是程序自身出错,不管我们是否连上服务器,程序都会一直在服务器上运行。

常用的tmux指令如下:

1)创建新的会话

$ tmux new -s session-name

session-name为指定的新会话的名称,新会话相当于完全“备份”了一份终端。

2)接入一个之前的会话

接入第一个可用的会话,使用指令:

$ tmux a

接入指定会话名称的会话,使用指令:

$ tmux a -t session-name

3)从会话中断开

断开当前连接的会话,会回到原始终端,但在该会话下运行的程序并不会停止,工作状态也会完全保留,这也是tmux的一大优势。

$ tmux detach

或者使用快捷键:

$ Ctrl-b d

4)杀死会话

杀死会话会将会话完全删除,此后再也无法接入该会话,状态和程序也不再保留。

$ tmux kill-session -t session-name

5)显示当前所有会话

开启多个会话是服务器中经常有的操作,尤其是当我们同时运行多个程序,或者有多个任务需要处理的时候,显示所有会话的指令如下:

$ tmux ls

或者使用快捷键:

$ Ctrl-b s

2. 查看显存和管理进程

1)查看与删除进程

使用top命令可以查看当前服务器运行的所有进程,以及cpu和内存占用量等,注意top是动态显示的:

$ top

使用jobs指令可以查看当前终端正在进行的进程:

$ jobs

使用jobs -l可以显示进程的PID,方便对进程操作:

$ jobs -l

使用kill指令可以杀死指定的进程,也可用于对进程的其他操作:

$ kill -9 PID

2)前台、后台、暂停与终止操作

长时间运行的程序尽量在后台执行,即命令末尾加&:

$ python xx.py &

前台的程序可以使用CTRL-Z暂停(中止),使用jobs命令可以看到进程处于stop状态。与之相对的是,使用CTRL-C是直接杀死进程(终止),相当于kill,进程会被杀死并消失。

使用bg可以将前台指令移到后台执行:

$ bg

使用fg可以将后台命令移到前台执行:

$ fg

3)查看显存

使用GPU训练时,显存的查看十分有必要,可以用来确定当前的batch大小是不是合适,以及共享的GPU上是否已经有其他程序在运行。使用nvidia-smi查看显存的使用情况(注意中间没有空格):

$ nvidia-smi

3)打印及重定向程序输出的信息

程序运行的信息以及错误信息需要我们及时保存在文件中,方便之后的查看和分析,推荐重定向和tee命令。

tee命令可以使程序正常向屏幕打印信息,与此同时将打印的信息保存在指定文件中:

$ python xx.py 2>&1 | tee xxx.out

使用重定向可以将标准输出(1)和标准错误(2)同时定向到文件中,此时屏幕不再打印信息,因为标准输出已经被重定向,不再是屏幕:

$ python xx.py 1> xxx.out 2>&1