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

【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 之间的关系。这些知识让我对操作系统的进程管理有了更直观的感受。
总之,这次实验让我收获颇丰,它不仅让我掌握了实用的编程技能,还为我后续的学习打下了坚实的基础。我相信,这些经验将在我未来的学习和实践中发挥重要作用。

http://www.xdnf.cn/news/2208.html

相关文章:

  • 数据结构手撕--【堆】
  • 【LeetCode】11.盛最多水的容器
  • 系列位置效应——AI与思维模型【80】
  • 鸿蒙代码@Builder
  • 关于调度策略的系统性解析与物流机器人应用实践
  • Universal Value Function Approximators 论文阅读(强化学习,迁移?)
  • 介绍常用的退烧与消炎药
  • 【Flume 】Windows安装步骤、配置环境
  • Llama factory如何全参数微调 Qwen2.5-7B-Instruct 模型并导入Ollama推理(详细版)
  • 大一下第一次考核题解
  • Linux文件目录操作实战
  • 【C++】15. 模板进阶
  • 【含文档+PPT+源码】基于Python的美食数据的设计与实现
  • llama factory 命令行推理流程
  • MUC基本知识
  • 电子电器架构 --- 乘用车电气/电子架构开发的关键挑战与应对策略
  • Shell编程之正则表达式
  • c++弹窗
  • threejs 零基础学习day01
  • 【补题】Codeforces Global Round 20 F1. Array Shuffling
  • Python循环中断:break和continue,循环else语法,综合案例
  • 一、人类社会结构的根本逻辑
  • Cribl 上传lookup 表,传入数据进event
  • 计算机网络的五层结构(物理层、数据链路层、网络层、传输层、应用层)到底是什么?
  • 揭开人工智能的神秘面纱:从概念到人工神经网络
  • Spring和Spring Boot集成MyBatis的完整对比示例,包含从项目创建到测试的全流程代码
  • 数据库系统概论(四)关系操作,关系完整性与关系代数
  • springboot集成MyBatis Generator快速开发
  • Pygame跨平台打包:将游戏发布到Windows、Mac和Linux
  • 当JIT遇见K8s