当你在Unix/Linux平台上运行程序时,需要在终端重复输入或者需要在终端断开后依然运行,可以用nohup和&命令组合的形式实现。
nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令运行由Command 参数和任何相关的Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用nohup 命令运行后台中的程序。要运行后台中的nohup 命令,添加& ( 表示“and”的符号)到命令的尾部。
下面对这两种命令的实际使用情况进行分析(以运行一个python代码为例):
nohup和& | 代码示例 | 终端的标准输出 | 标准输入 | 关闭终端后 |
都不使用 | python train.py (Command) | 命令的输出被显示在终端中,可以查看 | 不可以在当前终端继续输入 | 程序终止,输出没有保存 |
只使用nohup | nohup python train.py | 命令的输出被显示在终端中,可以查看 | 不可以在当前终端继续输入 | 程序继续运行同时输出被保存在 ./nohup.out文件中 |
只使用& | python train.py & | 以后台形式运行程序,命令的输出不可查看 | 可以在当前终端继续输入 | 程序终止,输出没有保存 |
同时使用 | nohup python train.py & | 命令的输出被显示在终端中,可以查看 | 可以在当前终端继续输入 | 程序继续运行同时输出被保存在 ./nohup.out文件中 |
nohup命令的参数[Arg...]中常用的是命令的日志输出路径,默认的输出位置是当前位置下的nohup.out文件,也可以自己指定保存的文件train_out.file或者不保存:
nohup python train.py 1> train_out.file 2>&1 & | 指定输出和错误到train_out.file |
nohup python train.py 1> /dev/null 2>&1 & | 输出到空文件位置,也就是不保存所有信息 |
nohup python train.py 1> train_out.file 2>error & | 将错误输出到error文件,输出到train_out.file |
如果需要结束代码,只需要通过 ps -ef | grep python 命令查找对应python进程的pid,然后kill掉就好了