Linux 系统下如何将前台应用作为后台进程运行:nohup 与 & 命令的使用

Xavier

COMMAND & 形式

  1. 前台进程变为后台进程。
  2. 如果不指定输出重定向(例如:COMMAND >out.log 2>&1 &),输出仍然打印到前台。
  3. 退出 shell 会话(其父进程),进程会收到 HUP 信号,从而退出。
  4. 在另一个 shell 会话向进程发送 INT 信号,进程会退出。

总结:COMMAND & 形式仅仅将前台进程放在后台运行,但进程输出仍打印在前台。并且,进程不会忽略任何信号。

nohup COMMAND 形式

  1. 前台进程不会变为后台进程。
  2. 如果不指定输出重定向(例如:nohup COMMAND >out.log 2>&1), 那么标准输出和标准错误都定向到了 nohup.out 文件中。
  3. 退出 shell 会话(其父进程),进程会收到 HUP 信号,但进程免疫 HUP 信号,不会退出。
  4. 在进程前台按 Ctrl + C,或者在另一个 shell 会话向进程发送 INT 信号,进程会退出。

总结:nohup COMMAND 形式仅仅使前台程序忽略 HUP 信号(退出 shell 时进程不会退出),并使进程标准输出和标准错误重定向到 nohup.out 文件。

nohup COMMAND & 形式

上述两种使用形式都不太能满足作为后台进程运行的需求,所以 nohup& 往往结合使用(nohup COMMAND &),其效果是:

  1. 进程在后台运行。
  2. 进程标准输出和标准错误定向到 nohup.out 文件。
  3. 进程会忽略 HUP 信号,因此退出 shell 会话时,也不会退出。

另外,若想将进程输出定向到其他文件,则可以使用 nohup COMMAND >/path/to/file 2>&1 & 。如果想忽略进程的输出,则可以使用 nohup bin >/dev/null 2>&1 &

阅读 278

Xavier 的技术博客
最近的关注重心: 1. 云原生 (Docker、Kubernetes) 2. 微服务 (网关 Kong、服务通讯 gRPC、通讯格式 Pro...

最近的关注重心:

426 声望
25 粉丝
0 条评论

最近的关注重心:

426 声望
25 粉丝
文章目录
宣传栏