原文地址:http://www.isee.xyz/a/5ea2a30dcfe99271725ca17b
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 &
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。