linux后台运行程序的两种方式:
nohup 命令介绍 :
用途:Linux命令用法,不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:
126 : 可以查找但不能调用 Command 参数指定的命令。
127 : nohup 命令发生错误或不能查找由 Command 参数指定的命令。 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
该命令的一般形式为:nohup command &
如果使用nohup命令提交作业,在缺省情况下该作业的所有输出都被重定向到当前目录一个名为nohup.out的文件中,除非另外指定了输出文件,例如下面这个命令:
1 | $nohup command > log.file 2>&1 & |
该命令输出被重定向到log.file文件中。
1 | $nohup python yourscript.py & |
该命令可以让你的python程序在后台运行,控制台输出导向到nohup.out文件
注意事项:
关于nohup启动python程序输出缓存问题:
python的输出有缓冲,导致nohup.out并不能够马上看到输出。
添加-u 参数,使得python不启用缓冲。
1 | $nohup python -u flush.py & |
关于退出问题:
在nohup执行成功后直接点击关闭程序按钮关闭终端,会断掉该命令对应的session,导致nohup对应的进程被通知一起shutdown。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,而不能直接关闭终端,这样才能保证命令一直在后台运行