当前位置: 首页 > news >正文

【fork初体验】

文章目录

  • Linux 实验:深入理解 fork 系统调用
    • 一、实验目的
    • 二、实验环境
    • 三、实验内容与步骤
      • (一)打印进程的进程 ID 和父进程 ID
        • 1. 编写程序
        • 2. 编译与运行
        • 3. 运行结果
      • (二)使用 fork 系统调用创建进程并加入循环语句
        • 1. 编写程序
        • 2. 编译与运行
        • 3. 运行结果
    • 四、总结

Linux 实验:深入理解 fork 系统调用

一、实验目的

熟悉 Linux 实验环境,掌握 vi 编程及 gcc 编译方法。进一步认识 fork 系统调用的实质,了解其在进程创建中的独特作用。

二、实验环境

VMware 虚拟机,Red Hat Linux

三、实验内容与步骤

(一)打印进程的进程 ID 和父进程 ID

1. 编写程序

在这里插入图片描述

2. 编译与运行
  • 首先,使用 vi 编辑器创建一个新文件,比如xxx.c,将上述代码复制进去。在命令行输入 vi xxx.c,进入 vi 编辑器后,按 i 进入插入模式,粘贴代码,然后按 Esc键,输入 wq保存并退出。
    在这里插入图片描述
3. 运行结果

运行程序后,屏幕会显示当前进程的进程 ID 和父进程 ID,让我们直观地了解进程的相关信息。

(二)使用 fork 系统调用创建进程并加入循环语句

1. 编写程序

下面是使用 fork 系统调用创建进程并加入循环语句的 C 语言代码:
在这里插入图片描述

2. 编译与运行
  • 同样使用 vi 编辑器创建新文件,将上述代码复制进去。
  • 使用 gcc 编译,运行可执行文件。
    在这里插入图片描述
3. 运行结果

运行该程序后,我们会看到父进程和子进程交替输出信息。这是因为 fork 系统调用会创建一个新的子进程,父子进程会并发执行,具体的输出顺序取决于操作系统的调度策略。

四、总结

在编写代码的初期,我犯了一个看似简单却影响颇大的错误。我在编写程序时,一时疏忽忘记添加行头 #include <stdio.h>。当我使用 gcc 编译程序,满心期待它能顺利运行时,却遇到了一连串的报错。报错信息显示在遇到 printf 函数时出现问题,当时我十分困惑,反复检查代码逻辑,却始终找不到问题所在。后来在查阅资料和仔细思考后,我才意识到是忘记包含标准输入输出头文件。加上 #include <stdio.h> 后,重新编译程序,它便顺利运行了。这次经历让我深刻认识到头文件在 C 语言编程中的重要性,头文件为程序提供了必要的函数声明和宏定义,是程序正常运行的基础。
在这里插入图片描述

通过这次实验,我不仅熟悉了 Linux 实验环境,还掌握了 vi 编程及 gcc 编译方法。使用 vi 编辑器时,从最初的操作生疏到后来能够熟练地进行代码编写和修改,每一次敲击键盘都是技能的提升。而在使用 gcc 编译器时,我学会了如何根据不同的需求进行编译选项的设置,确保程序能够正确编译。
更重要的是,我对 fork 系统调用有了更深入的认识。在学习过程中,我参考了老师课上发的文件以及网络上关于 fork 函数的讲解,了解到了许多有趣的现象。例如,\n 对父子进程输出的影响,以及子进程的 ID 和父进程 ID 之间的关系。这些知识让我对操作系统的进程管理有了更直观的感受。
总之,这次实验让我收获颇丰,它不仅让我掌握了实用的编程技能,还为我后续的学习打下了坚实的基础。我相信,这些经验将在我未来的学习和实践中发挥重要作用。

相关文章:

  • 【2025 最新前沿 MCP 教程 03】基础构建模块:工具、资源与提示
  • 提取office最强悍的软件
  • 【白雪讲堂】
  • Python循环语句-while循环(基础语法,基础案例,嵌套应用,嵌套案例)
  • C++栈的模拟实现
  • Tableau 基础表制作
  • Qt Charts 绘制曲线图示例
  • Trae 宝藏功能实测:从 Mcp 搭建天气系统,到 AI 重塑 Excel 数据处理
  • C语言 函数递归
  • Eclipse 插件开发 4 工具栏
  • JAVA JVM面试题
  • 【TypeScript】速通篇
  • 比象AI创作系统,多模态大模型:问答分析+AI绘画+管理后台系统
  • ip-prefix前缀列表
  • 基于PyTorch的图像识别主要依赖于深度学习模型(尤其是卷积神经网络,CNN)对图像特征进行自动学习和分类
  • dubbo 异步化实践
  • Python类和对象四(十三)
  • 【springboot知识】配置方式实现SpringCloudGateway相关功能
  • 通过Golang实现快速实现MCP Server
  • Go 语言中的实时交互式编程环境
  • 商务部:入境消费增长潜力巨大,离境退税有助降低境外旅客购物成本
  • 哈马斯同意释放剩余所有以色列方面被扣押人员,以换取停火五年
  • 哈马斯官员:只要以军持续占领,哈马斯就不会放下武器
  • 日均新开三家“首店”,上海的“首发经济”密码是什么?
  • 印度媒体称印巴在克什米尔再次交火
  • 摩根士丹利基金雷志勇:AI带来的产业演进仍在继续,看好三大景气领域