在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
最后修改:2021 年 09 月 26 日
如果觉得我的文章对你有用,请随意赞赏