终端如何后台运行命令

一、nohup

1
2
3
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的nohup.out文件不可写,输出重定向到 $HOME/nohup.out 文件中。

语法格式: nohup 要执行的命令 如:nohup python main.py

作用: 关闭标准输入(控制台无法输入),标准输出错误信息保存到 nohup.out 文件里面,关闭客户端后命令仍然会运行。


二、&

语法格式: 要执行的命令 & 如:python main.py &

作用: 不会关闭标准输入(控制台可以输入),打印日志仍然在终端,但会丢失 标准输出 和 错误信息,关闭客户端后命令会就马上停止。


三、nohup 和 &

所以推荐 nohup 和 & 的结合使用!!!,既可以在后台运行,终端还可以正常输入,也不会有日志打印,而且还可以随意关闭客户端。

语法格式: nohup python main.py &。这时,main.py 同目录下会生成一个 nohup.out 文件,存储了标准输出和错误信息。


四、重定向

nohup python train.py > train.log 2>&1 &

作用: 这个命令可以将 python train.py 的打印输出重定向到和 train.py同目录下的 train.log (写成train.txt 也可以)文件中。同时程序在后台运行,终端不会打印,可以正常输入,且可以关闭终端

其中,> file 表示将 标准输出 输出到 file文件;

1)> train.log 解释 :

python train.py运行的日志 重定向 写入到 train.log文件中,即输出内容不打印到屏幕上,而是输出到 train.log文件中。

2)2>&1 解释:

将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 train.log 文件中。

1
2
3
0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)

3)> train.log 2>&1 解释:

标准错误 重定向到 标准输出标准输出 再重定向到 train.log 中,即标准错误和标准输出都记录在了train.log