nohup 和 & 让程序后台运行

160 阅读2分钟

本文由 简悦 SimpRead 转码, 原文地址 segmentfault.com

nohup 是 no hang up 不挂起的意思,如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用 nohup 命令。该命令可以在你退出帐户 / 关闭...

原文地址:www.isee.xyz/a/5ea2a30dc…

nohup

nohupno hang up 不挂起的意思,如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户 / 关闭终端之后继续运行相应的进程。== 该命令运行后是前台进程 ==

eg: nobup java -jar xxx.jar

&

&指让程序后台运行

eg:java -jar xxx.jar &

两者特点

使用 nohup 运行程序:

  • 结果默认会输出到 nohup.out
  • 使用 Ctrl + C 发送 SIGINT 信号,程序关闭
  • 关闭 session 发送 SIGHUP 信号,程序免疫

使用 & 后台运行程序:

  • 结果会输出到终端
  • 使用 Ctrl + C 发送 SIGINT 信号,程序免疫
  • 关闭 session 发送 SIGHUP 信号,程序关闭

使用两者结合让程序后台运行

结合上面两个命令可以让程序后台运行,关闭窗口或者 ctrl+c 都不会中断进程

nohup java -jar xxx.jar &

日志文件的处理

类型文件描述符含义
标准输入(standard input)0从键盘输入
标准输出(standard output)1输出到屏幕(控制台)
错误输出(error output)2输出到屏幕(控制台)

使用nohup java -jar xxx.jar 命令会默认生成一个 nohup.out 文件来记录日志,标准输出和错误输出都会在该文件中。

如果我们要将日志输出到指定的其他文件时可以使用输出符号 >指定你的文件。例如将文件输出到log.txt 中可以使用命令:nohup java -jar xxx.jar 1>log.txt 字符1可以省略,这样标准输出日志会输出到 log.txt文件中,但是错误的日志怎么处理呢?我需要使用到 == 命令的重定向绑定 ==。修改命令为:nohup java -jar xxx.jar >log.txt 2>&1 & 将错误输出重定向到标准输出1中,这样标准输出和错误输出都会在log.txt文件中。

如果不需要日志该如何设置

有的时候程序中已经指定了日志的位置,那么就不需要nohup.out文件了,这时候要丢弃这个文件。

/dev/null代表 linux 的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称黑洞,

我们可以把日志输出指向这里: nohup java -jar xxx.jar >/dev/null 2>&1

总结

== 后台启动并且不需要nohup.out文件的命令:==

nohup java -jar xxx.jar   >/dev/null 2>&1 &