nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
语法格式:
nohup Command [ Arg … ] [ & ]
参数说明:
- Command:要执行的命令。
- Arg:一些参数,可以指定输出文件。
- &:让命令在后台执行,终端退出后命令仍旧执行。
示例命令代码:
以下命令在后台执行 查看当前路径下的文件内容:
nohup cat text.txt &
在终端如果看到以下输出说明运行成功:
nohup: ignoring input and appending output to 'nohup.out'
这时可以看到当前文件夹下生成了 nohup.out 文件。
如果要停止运行上面执行的命令,查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:
ps -aux | grep text.txt
参数说明:
- a : 显示所有程序
- u : 以用户为主的格式来显示
- x : 显示所有程序,不区分终端机
另外也可以使用 ps -def | grep text.txt 命令来查找。
找到 PID 后,使用 kill PID 来删除。
kill -9 进程号PID
在后台执行 查看当前路径下的文件内容,并重定向输入到 text.log 文件:
nohup cat text.txt > text.log 2>&1 &
2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 text.log 文件中。
- 0 – stdin (standard input,标准输入)
- 1 – stdout (standard output,标准输出)
- 2 – stderr (standard error,标准错误输出)
有时候用nohup执行python程序时,print()无法输出到日志中。如下命令:
nohup python test.py > nohup.out 2>&1 &
有时候发现nohup.out中显示不出来python程序中print的东西。这是因为python的输出有缓冲,导致nohup.out并不能够马上看到输出。
python 有个-u参数,使得python不启用缓冲。改为下述命令便可以啦!
nohup python -u test.py > nohup.out 2>&1 &