在Linux项目部署的时候,我们需要将程序放在后台运行,并且在关掉终端的时候仍然保持运行状态,此时单纯的 &
将不再管用,因为 &
在终端关掉的时候将会自动结束,这个时候,就需要用 nohup
去配合 &
使用,达到程序在关闭终端后仍然能够运行的效果。
关于nohup
Run COMMAND, ignoring hangup signals.
以上是 nohup --help
显示的介绍,翻译一下就是运行命令并让进程忽略 SIGHUP
信号,因为在终端关闭的时候,会发送一个 SIGHUP
信号,nohup
的作用就是忽略掉这个信号。因此,如果要让程序后台运行,还需要搭配 &
使用。
语法格式
nohup Command [ Arg … ] [ & ]
说明:
COMMAND
:要执行的命令ARG
:参数,例如指定输出文件&
:让命令后台运行
输出到指定文件
在默认情况下,标准输出内容将会输出到当前目录下的 nohup.out
文件中,若该文件不可写,将输出到 $HOME/nohup.out
文件中。
如果要重定向输出文件,可以这样使用
nohup Command > xxx 2>&1 &
其中,关于 2>&1
的解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 xxx 文件中。
- 0 – stdin (standard input,标准输入)
- 1 – stdout (standard output,标准输出)
- 2 – stderr (standard error,标准错误输出)
例子
# 默认输出
nohup ./test -a 123 &
# 输出到logs.log
nohup ./test -a 123 > logs.log 2>&1 &
结束进程
找到该进程的 PID
:
ps -aux | grep "test"
输出:
kakkk@kakkk:~/temp$ ps -aux | grep "test"
kakkk 162424 97.3 0.0 2356 524 pts/4 R 21:14 0:20 ./test -a 123
kakkk 162675 0.0 0.0 6300 740 pts/4 S+ 21:15 0:00 grep --color=auto test
使用 kill
结束进程:
kill 162424