Gleam亮 2022-06-17 22:43 采纳率: 87.5%
浏览 52
已结题

cd 目录 && nohup java -jar产生父进程的问题?

sh start.sh启动应用时,会有父进程(父进程ID不是1,父进程就是"sh start.sh")
start.sh脚本内容如下:

cd /home/gleam/demo && nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &

img

当我将&&改成换行之后,再执行sh start.sh时,就不会有父进程(父进程ID是1),改动后的start.sh脚本内容如下:

cd /home/gleam/demo
nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &

img

能否帮解答一下,这是什么原因呢?

  • 写回答

2条回答 默认 最新

  • IT民工金鱼哥 运维领域新星创作者 2022-06-21 10:12
    关注

    首先理解一下 父进程的知识:
    用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多shell,每个shell都是由某个shell(称为父shell)派生的。


    然后回归到脚本那里,&& 是逻辑与的意思,他是需要做判断再往下走,说直白点,你后面的命令是要依赖前面命令的结果,因此,是依赖关系,产生的进程还要依赖前面的进程。
    之后,肯定要派生新的进程,然后我是这么理解的:系统没识别到 cd /home/gleam/demo 的进程,就干脆用你现在执行的脚本来做父进程。


    所以,写脚本时,如果没有相关依赖执行的后台进程,都不做 逻辑判断,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 修改了问题 6月17日
  • 修改了问题 6月17日
  • 展开全部