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