cd /home/gleam/demo && nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &
cd /home/gleam/demo
nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &
能否帮解答一下,这是什么原因呢?
首先理解一下 父进程的知识:用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多shell,每个shell都是由某个shell(称为父shell)派生的。
然后回归到脚本那里,&& 是逻辑与的意思,他是需要做判断再往下走,说直白点,你后面的命令是要依赖前面命令的结果,因此,是依赖关系,产生的进程还要依赖前面的进程。
之后,肯定要派生新的进程,然后我是这么理解的:系统没识别到 cd /home/gleam/demo 的进程,就干脆用你现在执行的脚本来做父进程。
所以,写脚本时,如果没有相关依赖执行的后台进程,都不做 逻辑判断,
应该是&&和&优先级的问题:
cd /home/gleam/demo && nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &实际上的效果相当于:
(cd /home/gleam/demo && nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 ) &
而我想要的效果应该这样写:
cd /home/gleam/demo && (nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &)