Bash和shell

2 篇文章 0 订阅
一、相关概念
1、什么是shell,什么是bash?

管理计算机硬件的其实是内核,用户正是通过shell来跟内核通信的,从本质上说shell是一个能执行各种命令的宏处理器。而bash(/bin/bash)就是linux默认的shell。

2、什么是子shell?

子shell就是从当前shell环境中新开了一个shell环境。子shell和父shell的关系就是子进程和父进程的关系。子shell可以从父shell中继承很多环境,如变量、命令全路径、文件描述符、当前工作目录、陷阱等等。

3、子shell如何产生?(https://www.linuxidc.com/Linux/2017-08/146606.htm)

Linux上创建子进程的方式有三种:一种是fork出来的进程,一种是exec出来的进程,一种是clone出来的进程。(先不讨论clone)
(1).fork是复制进程,它会复制当前进程的副本(不考虑写时复制的模式),以适当的方式将这些资源交给子进程。
(2).exec是加载另一个应用程序,替代当前运行的进程,也就是说在不创建新进程的情况下加载一个新程序。exec还有一个动作:在进程执行完毕后,退出exec所在的shell环境。为了进程安全,如要形成新的且独立的子进程,都会fork一份当前进程,然后在fork出来的子进程上调用exec来加载新的程序。

4、如何判断是否进入了子shell?

执行

[root@myp ~]# echo "$BASHPID"
6371

如果输出结果和父进程中的pid值不同则就是进入了子shell.

5、进入子shell中的情况
  1. 执行bash内置命令时
  2. 执行脚本文件时
  3. 执行bash命令时
  4. 执行shell函数时(直接执行时不会进入子shell但是放入管道中会进入子shell)
  5. 执行非bash内置命令时
  6. 命令替换
  7. 使用括号()组合一系列命令
  8. 放入后台运行的命令
  9. 进程替换
二、shell执行命令的过程
  1. 从终端或者shell脚本或者 bash -c "STR"中读取命令
  2. 将命令拆分成单词和运算符
  3. 将符号解析成简单或者复杂的命令
  4. 进行各种sh+ell扩展
  5. 重定向
  6. 执行命令
  7. 等待命令解释,收集结束转态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值