博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybash的实现
阅读量:6391 次
发布时间:2019-06-23

本文共 1092 字,大约阅读时间需要 3 分钟。

任务详情

  • 使用fork,exec,wait实现mybash
  • 写出伪代码,产品代码和测试代码

相关知识

  • shell
    • shell俗称壳,它是一个命令解析器,是用户和Linux内核之间的接口程序。
    • 在Linux系统中,用户可以通过shell输入命令,shell通过计算机中的的一些程序,将命令转换成计算机懂的语言,让计算机执行某种程序。
  • bash
    • 我们可以把shell比作是浏览器,而bash是谷歌浏览器
    • Linux有各种各样的shellbash就是其中最为通用的一种
    • bash有很灵活和强大的编程接口,同时又有很友好的用户界面
    • 更多的关于bash部分我在网上查找了很多资料:
      • 、、
  • 实现Mybash
    • 使用man bash查看
      image
    • 查阅资料我们可知通常shell中执行命令的流程都是bash进程创建了一个子进程,然后子进程进程替换,替换为可执行的命令文件。
    • fork
      • 这个英文单词在英文里是"分叉"意思,它通过系统调用创建一个与原来进程几乎完全相同的进程,一个是子进程,一个是父进程。
      • 在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。
      • 可以通过fork返回的值来判断当前进程是子进程还是父进程。
    • exec
      • 是一组函数的统称,参数可以分成3个部分:执行文件部分、命令参数部分、环境变量部分
      • exec函数会取代执行它的进程, 也就是说, 一旦exec函数执行成功, 它就不会返回了, 进程结束. 但是如果exec函数执行失败, 它会返回失败的信息, 而且进程继续执行后面的代码
      • 通常exec会放在fork()函数的子进程部分, 来替代子进程执行啦, 执行成功后子程序就会消失, 但是执行失败的话, 必须用exit()函数来让子进程退出
    • wait
      • 父进程调用wait函数可以回收子进程终止信息
      • pid_t wait(int *status): 成功:清理掉的子进程ID;失败:-1 (没有子进程)

伪代码

while(1){    输出用户的ID,等数据;      用户输入命令;      创建子进程;    执行命令;    等待命令执行结束;}

代码实现

运行截图

  • 测试:lspwd
  • image

遇到问题及解决方法

  • 在进行编译时出现

    image

    解决办法:查阅后发现少了两个头文件:pwd.hsys/wait.h,程序中需要输出用户的虚拟机的用户ID等数据,就需要口令文件pwd.h,在开始就调用进程需要进程控制文件sys/wait.h来提供类型pid_t的定义。

转载于:https://www.cnblogs.com/besty-zyx/p/10016006.html

你可能感兴趣的文章
Selenium学习(一)---Selenium IDE安装及简单介绍
查看>>
PHP控制反转(IOC)和依赖注入(DI)
查看>>
学习计划
查看>>
获取鼠标和元素的坐标点
查看>>
PXE 部署不同版本的系统安装环境以及挽救环境
查看>>
Linux 计划任务
查看>>
flask的orm操作
查看>>
如何防止驱动被恶意利用
查看>>
Nagios的搭建
查看>>
我的友情链接
查看>>
Oracle SQL之--多表查询基础用法
查看>>
图形化插件对Eclipse的版本要求
查看>>
两个关于数列的Python脚本(斐波那契数列和猴子吃香蕉类问题)
查看>>
olabuy-时光从来素默,内心应保持一份素淡与简静
查看>>
kux文件怎么打开 苹果手机如何观看kux视频
查看>>
Python中的urllib.request模块
查看>>
第九课 《说人话》
查看>>
js对象数组排序
查看>>
如何实现在展示商品时,放大商品细节
查看>>
uboot boot流程分析
查看>>