红联Linux门户
Linux帮助

什么是子shell什么是父shell

发布时间:2012-04-22 22:32:51来源:红联作者:mr_tianwei
这两个概念有点不清楚,当前登录的shell 是bash,如果进入csh是不是就是进入了子shell,那上一层的bash就是它的父shell?他们的联系和区别是什么
文章评论

共有 3 条评论

  1. 相思爱文 于 2012-05-07 22:54:50发表:

    ps -ef可以查看进程对应的父进程

  2. 奋斗inbloom 于 2012-05-07 12:14:01发表:

    不是~~~建议你查阅相关资料

  3. hg996 于 2012-04-23 08:48:08发表:


    父Shell与子Shell

    Login Shell

    登录主机后,在执行Bash Script之前,其实我们已经处于一个BashShell中。

    这个Shell叫login Shell,是将来我们执行任何Script的上层环境。又叫父SHell



    其实每个帐号都可以自定义loginShell。以Linux来说,帐号的login Shell定义在/etc/passwd这个文件中。

    /etc/passwd的每一行代表一个帐号,共有7个字段,之间用:隔开。

    帐号:x:UID 使用者代码:GID 群组代码:用户信息:主目录:login shell路径

    第二栏x为密码栏,基于系统安全考虑,编码后的密码已经被放入/etc/passwd文件中。

    login Shell定义在第7个字段,如果这个字段的Shell程序不存在、不合法,或执行失败,则无法登录主机。



    父Shell、子Shell

    当在执行一个Shell Script时,父Shell会根据Script程序的第一行#!之后指定的Shell程序开启一个子Shell环境,然后在子Shell中执行此Shell Script。一旦子Shell中的Script执行完毕,此子Shell随即结束,回到父Shell中,不会影响父Shell原本的环境。

    子Shell环境拥有与父Shell相同的环境变量、标准输入、输出、错误等。



    例如:

    test.sh文件内容

    #!/bin/bash

    cd /var/www/html



    命令行:chmod +x /test.sh

    命令行:./test.sh

    执行完脚本后还原到父Shell,并且父Shell并没有进入/var/www/html目录。

    注:这是因为当执行Shell文件时,父Shell会创建子Shell,各自独立。



    如果需要使用父Shell来执行此脚本,可以使用:

    命令行:. ./test.sh

    注意.与./之间有一个空格符





    子Shell继续开启子Shell

    与父Shell启动子Shell方式一样,继续调用下去,即子Shell开启子Shell。

    通过$SHLVL变量,可以知道当前所在Shell的层次