以java命令为例解析linux命令行调用语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BuquTianya/article/details/79184078

后台运行命令

先给出来几个执行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意思就是把标准错误的信息,重定向到标准输出中。

猜你喜欢

转载自blog.csdn.net/BuquTianya/article/details/79184078