20155308 加分题-mybash的实现(第五周)

实验要求

  • 使用fork,exec,wait实现mybash
  • 写出伪代码,产品代码和测试代码
  • 发表知识理解,实现过程和问题解决的博客(包含代码托管链接)

使用fork,exec,wait实现mybash(代码

fork

首先用man命令查看fork的使用方法

  • 其功能

通过复制调用fork的进程创建一个新进程。

  • 返回值

创建子进程成功时,fork在父进程中返回子进程的pid,在子进程中返回0。失败时,在父进程中返回-1,无子进程被创建,相应的错误在errno中设置。

  • fork创建子进程代码

将代码中加入sleep(1)重新编译并运行程序得到运行结果:

其不同的原因为当程序执行fork()语句后就又多出了一个进程,进程的运行符合“多个进程的运行方式”。

exec()

首先用man命令查看exec的使用方法

  • 其功能

当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。

  • 返回值

这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回,如果调用出错则返回-1,所以exec函数只有出错的返回值而没有成功的返回值。

  • 验证exec功能代码

当进程调用execv函数时,该进程的用户空间代码和数据完全被exec_call替换,从exec_call的启动例程开始执行。调用execv进程后面的代码没有被执行。所以出现了错误。

  • 解决方法

参考了
http://blog.csdn.net/misskissc/article/details/38467801

这篇博客。
在“fork创建子进程代码”中加入execv函数:

wait

首先用man命令查看wait的使用方法

  • 功能

对于一个已经终止的子进程,用wait能够让系统释放与子进程相关的资源;如果不用wait则终止的进程会变为僵尸进程。

  • 返回值

若调用成功则返回清理掉的子进程id,若调用出错则返回-1。

mybash代码

  • 伪代码
  1. 对用户输入的命令进行解析
  2. 检查用户输入的命令是否为内置的Linux命令
  3. 构造argv向量

为什么不能成功打印出来?

  • 解决
    上网找了一下,不知道为什么,之后看了一下同学的博客,发现在前面加上“/bin”就可以了。但是不是很理解。

实验中的问题

见上面实验过程

感想

本次加分题是复习了老师课上所讲的内容,重新练习了关于进程的一些知识点。虽然自己课上也听了一些,但是感觉掌握知识的能力不强,所以在课下练习时也出现了一些问题。但是我通过网上一些知识点的查找,最终了解了这部分的内容。

20155308 加分题-mybash的实现(第五周)的更多相关文章

  1. 20155326 第五周加分题--mybash的实现

    第五周加分题--mybash的实现 题目要求 1.使用fork,exec,wait实现mybash 2.写出伪代码,产品代码和测试代码 3.发表知识理解,实现过程和问题解决的博客(包含代码托管链接) ...

  2. 第五周加分题--mybash的实现

    第五周加分题--mybash的实现 题目要求 1.使用fork,exec,wait实现mybash 2.写出伪代码,产品代码和测试代码 3.发表知识理解,实现过程和问题解决的博客(包含代码托管链接) ...

  3. 第五周 加分题-mybash的实现

    第五周 加分题-mybash的实现 使用fork,exec,wait实现mybash 产品代码 #include <stdio.h> #include <stdlib.h> # ...

  4. 2017-2018-1 20155320 第五周 加分题-mybash的实现

    2017-2018-1 20155320 第五周 加分题-mybash的实现 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客( ...

  5. 2017-2018-1 20155239 《信息安全系统设计基础》第五周学习总结+mybash的实现

    2017-2018-1 20155239 <信息安全系统设计基础>第五周学习总结+mybash的实现 mybash的实现 使用fork,exec,wait实现mybash 写出伪代码,产品 ...

  6. 20155308 加分项——C语言实现Linux的pwd命令

    20155308 加分项--C语言实现Linux的pwd命令 实现要求 学习pwd命令 什么是pwd pwd' 代表的是'Print Working Directory'(打印当前目录).如它的名字那 ...

  7. 20155322 2017-2018-1 《信息安全系统设计》第五周 MyBash实现

    #20155322 2017-2018-1<信息安全系统设计>第五周 MyBash实现 [博客目录] 实现要求 相关知识 bash fork exec wait 相关问题 fork返回两次 ...

  8. 第五周 mybash的实现

    第五周 mybash的实现 1. 使用fork,exec,wait实现mybash 2. 写出伪代码,产品代码和测试代码 3. 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 1. for ...

  9. 20155308 2016-2017-2 《Java程序设计》第9周学习总结

    20155308 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 驱动的四种类型 JDBC-ODBC Bridg ...

随机推荐

  1. Chrome 插件推荐

    我在这里就是抛砖引玉,各位开发者,有更好的插件请不要吝啬,分享出来. 希望世界和平! 翻译类 沙拉查词 目前使用,感觉挺好的,各种词典,还有统计.划词划句都可以翻译出来. JSON 格式转换 JSON ...

  2. Java对于表达式中的自动类型提升

    1 表达式中的自动类型提升: 表达式求值时,Java自动的隐含的将每个byte.short或char操作数提升为int类型,这些类型的包装类型也是可以的. 例如: short s1 = 1; s1 = ...

  3. Ionic Css样式详解

    Header是固定在屏幕顶部的组件.可以包含如标题和左右的功能按钮.Sub Header同样是固定在顶部,只是是在Header的下面,就算没有写Header这个,Sub Header这个样式也会距离顶 ...

  4. Windows 7系统启动MongoDB失败解决办法?

    问题现象: 1.在配置Python环境安装MongoDB时发现在“服务”里面手动启动失败,报错如下: 2.在cmd里面也无法启动,注意这里要以管理员身份启动cmd哦 问题解决: 1.需要先在bin下执 ...

  5. 水晶报表自定义纸张大小打印 (Crystal Report Print with custom paper size)

    System.Drawing.Printing.PrintDocument doc = new PrintDocument(); doc.PrinterSettings.PrinterName = & ...

  6. Asp.net Core相关教程及开源项目推荐

    入门 全新的ASP.NET:  https://www.cnblogs.com/Leo_wl/p/5654828.html 在IIS上部署你的ASP.NET Core项目: https://www.c ...

  7. elif 相当于else&if

    if  条件: 语句块 elif 条件: 语句块 ... else                      #elif好像要有一个else作为结尾

  8. UI(一)

    1.AfxWinMain 首先,MFC程序先执行到TheApp实例化对象也就是通过这句CTestApp the App来实例化对象的然后,调用CTestApp构造函数分配内存空间 然后,就调用了Afx ...

  9. React Native 基础报错及解决方案记录

    刚开始上手RN,碰到很多坑,记录一下.碰到问题多去看看github上面的issue! 启动命令react-native run-ios报错 1.:xcrun: error: unable to fin ...

  10. 最新版本2018.1.1webstorm安装、汉化、破解教程

    一.安装(下载与激活) 1.官网下载安装包https://www.jetbrains.com/webstorm/ 2.开始安装 3.选择安装目录,点击下一步 4.勾选64位,点击下一步 5.继续下一步 ...