详解:为什么需要父子shell

发布时间 2024-01-03 17:05:09作者: 与太阳肩并肩

父子Shell

  1.source和点,执行脚本,只在当前的shell环境中执行生效

  2.指定bash、sh解释器运行脚本,是开启subshell,开启子shell运行脚本命令

  3.`./script`,都会指定shebang,通过解释器运行,也是开启subshell运行命令

  1.父shell的概念:

    1.pstree看到如下结果,就是父shell环境

      sshd───sshd───bash───su───bash───pstree

    2.ps进程管理命令,查看

      ps -ef

      -f 显示UID,PID,PPID

      -e 列出所有进程的信息,如果-A选项option

    

      通过一条命令,检查父子shell的关系

        ps -ef --forest

 

  2.子shell的概念:

     2.1 多个子shell:

    为什么学习子shell?如下

 

 

    2.2 创建进程列表(创建子shell)

      场景:需要执行一系列的shell命令

      例如执行该命令:ls;cd ;pwd;echo "奥利给"

      列表,肯定是被包括起来的数据

      shell的进程列表概念,需要使用()小括号,如下执行方式,就称之为,进程列表,加上小括号,就是开启子shell运行命令,案例如下

        (cd ~;pwd;ls ;cd /tmp/;pwd;ls)

    2.3 检测是否在子shell环境中

      Linux默认的有关shell的变量

      特点:该变量的值特点,如果是0,就是父shell环境,否则是子shell

        echo $BASH_SUBSHELL

      检测是否开启了子shell运行命令:

        cd ~;pwd;ls ;cd /tmp/;pwd;ls;echo $BASH_SUBSHELL

      明确开启子shell运行的命令,进程列表,并且开启子shell运行

        (cd ~;pwd;ls ;cd /tmp/;pwd;ls;echo $BASH_SUBSHELL)

 

   3.子shell嵌套运行
    上一段是一个小括号,开启一个子shell运行命令,还可以嵌套多个,命令例子1:
    (pwd;(echo $BASH_SUBSHELL))

  

    命令例子1:
      (pwd;(pwd;(echo $BASH_SUBSHELL)))

  结论:

    利用括号, 开启子shell的理念,以及检查,在shell脚本开发中,经常会用子shell进行多进程的处理,提高程序并发执行效率。