本文由 简悦 SimpRead 转码, 原文地址 segmentfault.com
nohup 是 no hang up 不挂起的意思,如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用 nohup 命令。该命令可以在你退出帐户 / 关闭...
原文地址:www.isee.xyz/a/5ea2a30dc…
nohup
nohup是no 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 &