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

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

例如有一个test.py文件,切换到当前文件夹下运行,输入命令:

nohup python test.py &

那么程序就会执行,并且在当前文件夹下生成nohup.out的日志文件。(&:让命令在后台执行,终端退出后命令仍旧执行。)

但是有个问题:我在py文件里面有print,但是在nohup.out文件里不能及时输出(tqdm倒是能及时输出),经过查询发现了原因,这是因为python的输出有缓冲,导致nohup.out并不能够马上看到输出。

python 有个-u参数,使得python不启用缓冲。

那么运行py文件的命令可以修改为:

nohup python -u test.py &

如果想不想默认输出到nohup.out,可以使用重定向的方法,输出到指定的文件。例如:

nohup python -u test.py > test.out 2>&1 &

该命令会将test.py的终端执行情况输出到当前文件夹下的test.out中(自动创建)。当然test.py和test.out都可以写绝对路径。