Linux后台运行命令
在云服务训练模型时,通常需要花费很多时间,但是又不能保证网络一直连接,很有可能出现网络终端导致终端推出,从而中断现有程序,那么可以考虑使用一些方法,让程序在后台运行,即使终端退出,也能保证程序正常运行。
1、screen命令
Screen是一个全屏窗口管理器,它在多个进程(通常是交互式shell)之间多路传输物理终端。用户可以创建多个独立的终端会话,并在它们之间自由切换,每个会话都可以运行不同的程序或命令,即使在网络连接不稳定或终端意外关闭的情况下,会话中的程序仍会继续运行。用户可以随时回到相应会话查看程序运行状态或与程序进行交互,而无需让程序一直占用前台终端。
安装
ubuntu下使用apt命令安装
sudo apt install screen
centos下使用yum安装
yum install screen
常见命令
创建会话
screen -S session_name:创建一个名为 session_name 的新 screen 会话。不会检录之前创建的screen(也就是会创建同名的screen)
screen -R session_name:创建一个名为 session_name 的新 screen 会话。,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen
列出会话
screen -ls:列出当前所有的 screen 会话,显示会话的 ID、名称、创建时间等信息。
连接会话
screen -r session_id或screen -r session_name:连接到指定 ID 或名称的 screen 会话。
分离会话
在 screen 会话中,按下Ctrl + A组合键,然后再按下D键,即可将会话分离,使会话在后台继续运行。
关闭会话
在 screen 会话中,输入exit命令,即可关闭当前会话。也可以使用screen -X -S session_name quit命令在外部关闭指定名称的会话。
窗口操作
Ctrl + A然后按C:在当前 screen 会话中创建一个新窗口。
Ctrl + A然后按N:切换到下一个窗口。
Ctrl + A然后按P:切换到上一个窗口。
使用
新建窗口
screen -S first
创建了名为first的窗口
运行程序
创建完成后,就是在新的终端里了,可以直接运行程序
python run.py
退出终端
ctrl+a 然后按d,退出当前会话,会话在后台运行
查看会话
screen -ls
可以看到如下图所示,就是当前系统中后台的会话
重新进入会话
screen -r first
重新进入会话可以查看当前程序运行的状态。
2、nohup命令
nohup 命令的主要功能是忽略 SIGHUP(挂起信号)。当用户注销或终端关闭时,系统会向该终端上运行的所有进程发送 SIGHUP 信号,默认情况下,进程接收到这个信号后会终止运行。而使用 nohup 启动的程序会忽略这个信号,从而保证程序在用户退出后能够继续执行。
用法
这个命令比较简单,
nohup command [arguments] &
command:要执行的命令。
arguments:命令所需的参数。
&:将命令放到后台执行。
例如需要在后台运行run.py文件,可以这样运行
nohup python run.py
输出重定向
上面运行命令后,程序的标准输出会保存在nohup.out文件里面,如果需要将程序的输出保存到其它文件,可以这样使用
nohup python run.py > output.log 2>&1 &
> : 将标准输出重定向到 output.log 文件。
2>&1:将标准错误输出也重定向到和标准输出相同的地方,也就是 output.log 文件。
终止任务
如果需要终止使用 nohup 启动的程序,可以使用 ps 命令查找程序的进程 ID(PID),然后使用 kill 命令终止进程。例如:
ps -aux | grep run.py # 查找进程 ID
kill -9 <PID> # 终止进程
缺点
ohup 只是简单地让程序忽略 SIGHUP 信号,不能像 screen 或 tmux 那样提供会话管理功能,无法方便地在不同任务之间切换和查看运行状态。