【fork初体验】

news2025/4/28 12:30:29

文章目录

  • 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.coloradmin.cn/o/2343968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习设计模式《六》——抽象工厂方法模式

一、基础概念 抽象工厂模式的本质是【选择产品簇(系列)的实现】&#xff1b; 抽象工厂模式定义&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类&#xff1b; 抽象工厂模式功能&#xff1a;抽象工厂的功能是为一系列相关对象或相互依…

python_BeautifulSoup提取html中的信息

目录 描述&#xff1a; 过程&#xff1a; step one 下载html网页到本地 step two 提取html信息 list_con soup.select(.list-con) [0] li_list list_con.find_all(li) a li.find(span).find(a) title a.get(title) url a.get(href) span li.find(span).find(spa…

今日头条如何查看IP归属地?详细教程与常见问题解答

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台展示用户真实性的重要标识。今日头条作为国内领先的资讯平台&#xff0c;也提供了IP属地显示功能。那么&#xff0c;今日头条怎么查看IP归属地&#xff1f;本文将详细介绍在今日头条11.9.0版本中如何查看自己和他人的…

【物联网】基于LORA组网的远程环境监测系统设计(机智云版)

基于LORA组网的远程环境监测系统设计(机智云版) 演示视频: 简介: 1.本系统有一个主机,两个从机。 2.一主多从的LORA组网通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机…

制作一款打飞机游戏22:表格导出

编辑器功能扩展 今天&#xff0c;我想让编辑器能够处理一个数组&#xff0c;这是编辑器将要编辑的东西&#xff0c;它只编辑数组。这些区域在后续的不同版本的编辑器中会有不同的含义&#xff0c;但现在我想创建一个模板&#xff0c;能够加载一个二维数组&#xff0c;并将二维…

Linux内核源码结构

目录 Linux内核源码结构 Linux内核版本命名 Linux内核版本选择 内核源码结构 arch&#xff1a;与CPU架构相关的源代码 block:磁盘设备的支持 COPYING文件 CREDITS文件 crypto:加密相关 Documentation: drivers:设备驱动 firmware:固件 fs:文件系统 include:头文件…

72.评论日记

【巫师】中美关税战02&#xff1a;应给人民爆装备&#xff0c;以及普通人如何应对(7条建议)_哔哩哔哩_bilibili 2025年4月26日11:03:31

Websocket自动发送消息客户端工具

点击下载《Websocket自动发送消息客户端工具》 1. 前言 在现代网络应用中&#xff0c;实时通信和即时数据传输变得越来越重要。WebSocket作为一种全双工通信协议&#xff0c;因其高效、实时的特点&#xff0c;被广泛应用于聊天应用、实时数据监控、在线游戏等领域。然而&…

STM32的开发环境介绍

目录 STM32软件环境 Keil软件在线安装 其他软件环境安装 STM32开发的几种方式 STM32寄存器版本和库函数版本 标准外设库的作用&#xff1a; STM32软件环境 STM32 的集成开发环境&#xff08;IDE&#xff09;&#xff1a;编辑编译软件 常见的环境&#xff1a; (1)KEIL&a…

数据库系统概论(四)关系操作,关系完整性与关系代数

数据库系统概论&#xff08;四&#xff09;详细讲解关系操作&#xff0c;关系完整性与关系代数 前言一、什么是关系操作1.1 基本的关系操作1.2 关系数据语言的分类有哪些 二、关系的完整性2.1 实体完整性2.2 参照完整性2.3 用户的定义完整性 三、关系代数是什么3.1 传统的集合运…

基于 IPMI + Kickstart + Jenkins 的 OS 自动化安装

Author&#xff1a;Arsen Date&#xff1a;2025/04/26 目录 环境要求实现步骤自定义 ISO安装 ipmitool安装 NFS定义 ks.cfg安装 HTTP编写 Pipeline 功能验证 环境要求 目标服务器支持 IPMI / Redfish 远程管理&#xff08;如 DELL iDRAC、HPE iLO、华为 iBMC&#xff09;&…

使用 Node、Express 和 MongoDB 构建一个项目工程

本文将详细介绍如何使用 Node.js Express MongoDB 构建一个完整的 RESTful API 后端项目&#xff0c;涵盖&#xff1a; 项目初始化 Express 服务器搭建 MongoDB 数据库连接 REST API 设计&#xff08;CRUD 操作&#xff09; 错误处理与中间件 源码结构与完整代码 部署建…

【C++11】右值引用和移动语义:万字总结

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲右值引用和移动语义 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C学习笔记 &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C语言入门基础&#xff0c;python入门基…

Python基于Django的全国二手房可视化分析系统【附源码】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

VulnHub-DC-2靶机渗透教程

VulnHub-DC-2靶机渗透教程 1.靶机部署 [Onepanda] Mik1ysomething 靶机下载&#xff1a;https://download.vulnhub.com/dc/DC-2.zip 直接使用VMware导入打开就行 2.信息收集 2.1 获取靶机ip(arp-scan/nmap) arp-scan -l ​ nmap 192.168.135.0/24 2.2 详细信息扫描(nmap)…

n8n 中文系列教程_10. 解析n8n中的AI节点:从基础使用到高级Agent开发

在自动化工作流中集成AI能力已成为提升效率的关键。n8n通过内置的LangChain节点&#xff0c;让开发者无需复杂代码即可快速接入GPT-4、Claude等大模型&#xff0c;实现文本处理、智能决策等高级功能。本文将深入解析n8n的AI节点体系&#xff0c;从基础的Basic LLM Chain到强大的…

计算机网络 | 应用层(1)--应用层协议原理

&#x1f493;个人主页&#xff1a;mooridy &#x1f493;专栏地址&#xff1a;《计算机网络&#xff1a;自定向下方法》 大纲式阅读笔记 关注我&#x1f339;&#xff0c;和我一起学习更多计算机的知识 &#x1f51d;&#x1f51d;&#x1f51d; 目录 1. 应用层协议原理 1.1 …

MuJoCo 关节角速度记录与可视化,监控机械臂运动状态

视频讲解&#xff1a; MuJoCo 关节角速度记录与可视化&#xff0c;监控机械臂运动状态 代码仓库&#xff1a;GitHub - LitchiCheng/mujoco-learning 关节空间的轨迹优化&#xff0c;实际上是对于角速度起到加减速规划的控制&#xff0c;故一般来说具有该效果的速度变化会显得丝…

LVGL模拟器:NXP GUIDER+VSCODE

1. 下载安装包 NXP GUIDER&#xff1a;GUI Guider | NXP 半导体 CMAKE&#xff1a;Download CMake MINGW&#xff1a;https://github.com/niXman/mingw-builds-binaries/releases SDL2&#xff1a;https://github.com/libsdl-org/SDL/releases/tag/release-2.30.8 VSCODE&…

《USB技术应用与开发》第四讲:实现USB鼠标

一、标准鼠标分析 1.1简介 1.2页面显示 其中页面显示的“”不用管它&#xff0c;因为鼠标作为物理抓包&#xff0c;里面有时候会抓到一些错误&#xff0c;不一定是真正的通讯错误&#xff0c;很可能是本身线路接触质量不好等原因才打印出来的“”。 1.3按下鼠标左键 &#x…