以java命令为例解析linux命令行调用语句
Posted 不去天涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以java命令为例解析linux命令行调用语句相关的知识,希望对你有一定的参考价值。
后台运行命令
先给出来几个执行java命令行语句的例子:
1.java -jar gs-spring-boot-docker-0.1.0.jar
2.java -jar gs-spring-boot-docker-0.1.0.jar &
3.nohup java -jar gs-spring-boot-docker-0.1.0.jar
4.nohup java -jar gs-spring-boot-docker-0.1.0.jar &
5.nohup java -jar gs-spring-boot-docker-0.1.0.jar > log.log &
第一个命令是简单的java命令执行一个jar文件,由于这个jar文件的MANIFEST.MF
文件中已经指定了Main-Class: org.springframework.boot.loader.JarLauncher
,所以我们不用在命令行给出main方法所在的类了。
如果jar里面的MANIFEST.MF
文件中没有指定Main-Class
,那么运行语句需要改成java -cp gs-spring-boot-docker-0.1.0.jar org.springframework.boot.loader.JarLauncher
第二个命令在末尾增加了一个&符号。末尾&符号的作用是:在后台运行
。当我们运行之后,确实命令行立刻恢复到了输入状态,但是每当后台运行的程序有标准输出时,仍然会输出在当前的窗口上。
如果不想输出到当前窗口,可以使用重定向符号来指定输出位置,像这样java -jar gs-spring-boot-docker-0.1.0.jar > log.log &
。
这里简单说一下三个定向符号:>
标准输出定向到文件,文件原有内容会被覆盖;>>
以追加方式把标准输出定向到文件,文件原有内容会保留,新输出会追加到文件末尾;<
标准输入定向到文件。
第三条命令是在第一条的基础上增加了nohup命令。nohup的作用是:已不间断的方式运行,忽略hangup singal,也就是命令行窗口退出,程序也不退出。
但是命令行仍然被占用,也就是nohup没有让程序后台运行。
所以,大家会在很多地方看到nohup和&被同时使用,也就是第四条命令的样式。这样就能既让程序在命令行窗口退出时仍然处于运行状态,又能在命令执行后的瞬间能把命令行所有权释放。
由于nohup会把标准输出写到nohup.out文件中,如果想执行自己的文件名,可以使用第五条命令的样式,指定自己的输出文件位置。
如果也就程序内部已经指定的日志输出位置,那么我们可以不保留标准输出的内容,可以把标准输出写入到/dev/null中,像这样nohup java -jar gs-spring-boot-docker-0.1.0.jar > /dev/null &
2>$1
还是看一个例子:
nohup java -jar gs-spring-boot-docker-0.1.0.jar > log.log 2>&1 &
这里的nohup、末尾的&、以及>log.log的意义已经解释过了,这里在看一下2>&1。
这里的1和2分别代表标准输出和标准错误,还有一个值0,代表标准输入:
文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
2 > &1意思就是把标准错误的信息,重定向到标准输出中。
以上是关于以java命令为例解析linux命令行调用语句的主要内容,如果未能解决你的问题,请参考以下文章