fork()函数
在 Linux 中创建一个新进程的唯一方法是使用fork()函数。fork()函数是 Linux 系统中一个非常重要的函数,和咱们以前遇到过的函数由一些区别,因为它看起来执行一次却返回两个值,这又作何解释?不着急,慢慢看。
函数说明
fork()函数用于从已存在的一个进程中创建一个新的进程,新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。
因为子进程几乎是父进程的完全复制,所以父子进程会运行同一个程序。这就需要用一种方式来区分它们,并使它们照此运行,否则,这两个进程不可能做不同的事。
实际上是在父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行,从而使两个进程分别获得其所属fork()函数的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。因此,可以通过返回值来判定该进程是父进程还是子进程。
同时可以看出,使用fork()函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使得 fork()函数的系统开销比较大,而且执行速度页不是很快。
函数语法
下表列出了 fork() 函数的语法要点
基础实验
如下为fork()函数的基础实验程序
程序代码我上传到资源,可以自己下载,点此下载
将它编写成C文件,然后输入命令:gcc fork.c -o fork
接着执行命令:./fork,就可以看到如下图的成功执行结果
当然,你也可以使用命令:arm-linux-gcc fork.c -o fork 交叉编译后下载到板子上运行也可。
下一节:http://blog.csdn.net/mybelief321/article/details/9055589
相关推荐
该手册分为多个实验,从基础的“Hello World”程序开始,逐步深入到内核驱动、多任务编程、串口通信、文件传输、进程管理等Linux系统的高级功能。以下是手册中所包含实验的知识点概览: 1. 实验一:Hello World。该...
### iTOP-4412实验手册知识点概览 ...通过以上实验,不仅可以深入了解iTOP-4412开发板的特性和Linux操作系统的基本功能,还能掌握一系列关键的编程技术和技巧,为后续的嵌入式系统开发奠定坚实的基础。
这样的设计能模拟多任务执行,理解和掌握这三个函数的用法对理解操作系统进程管理至关重要。 在"200609020111薛强(操作系统课程设计)"的文件中,很可能包含了关于如何结合使用`fork`, `exec`和`wait`进行课程设计...
在电子科技大学的Linux环境编程课程中,学生们会接触到一系列与操作系统、编程接口和系统调用相关的实践任务。这个“电子科大Linux环境编程作业”压缩包包含了一系列的练习,旨在帮助学生深入理解Linux系统下的程序...
通过这个实验,学生将能够熟练地在Linux终端中执行基本任务,为后续的Linux学习打下坚实基础。 实验二:简单Shell程序设计 1、实验目的: 该实验旨在使学生了解Shell脚本编程,理解其基本语法和控制结构,以实现...
【标题解析】 "NJUPT GNU/Linux编程课件和代码"这个标题表明这是一个与GNU/Linux...通过这份NJUPT的GNU/Linux编程资源,学习者可以全面系统地掌握Linux下的编程技术和实践方法,为成为合格的Linux开发者打下坚实基础。
这个名为“LINUX实验程序——初学者”的压缩包显然是一系列针对初学者设计的Linux学习资源,旨在帮助新手掌握Linux的基本概念和系统编程技巧。下面,我们将深入探讨其中可能包含的知识点。 1. **Linux基础**:学习...
这些编程任务通常涉及使用系统调用接口,如open、read、write、fork、execve、waitpid等,以及相关的头文件和库函数。 1. **文件操作**:Linux/Unix系统编程中,文件操作是基础。通过open函数打开文件,read和write...
UNIX/Linux系统通常采用多用户、多任务的体系结构,由内核、shell、应用程序等部分组成。内核负责管理硬件资源并提供核心服务;shell作为用户与系统的接口,用于执行命令和脚本;应用程序则提供具体的用户功能。 **...
Linux并发编程实验主要涵盖了进程和线程的操作,这是Linux系统编程中的高级主题,主要面向那些希望通过多任务执行来提高程序性能的开发者。在Linux环境下,进程和线程的并发编程通常会涉及到系统调用和相关库函数的...
8. **并发执行**:通过`fork()`创建的父子进程可以并发执行,这体现了多任务并行处理的特性。实验中,通过观察不同进程打印结果的顺序,理解并发执行的特点。 9. **进程同步**:`wait`系统调用用于等待子进程结束,...
在Linux环境下,`pthread_create()`函数是最常用的创建线程的方法,它类似于创建新进程的`fork()`函数。该函数接收四个参数:线程标识符、线程属性、线程启动例程以及传递给线程的参数。通过这些参数,我们可以灵活...
通过这些实验,学习者可以逐步熟悉Linux内核、设备驱动、网络编程、多任务处理等多个重要领域,为实际的嵌入式系统开发打下坚实基础。同时,实验源码的分析和调试也是提升编程技能的有效途径,能够帮助开发者更深入...
【Linux编程基础】是IT领域的基础知识之一,涵盖了多个关键领域,包括C语言的使用、Shell脚本编写、Linux进程开发、串口编程、Socket编程以及Linux驱动开发。 **C语言的回顾** C语言是由贝尔实验室的Dennis Ritchie...
在Linux中,可以使用fork()创建新进程,使用exec()系列函数加载新的程序,用wait()和waitpid()等待子进程结束,以及用信号处理函数来处理进程间的同步和通信。在Cygwin下,这些函数同样可用,使得Windows用户能在...
### 知识点总结 ... Linux系统基础知识(二)安装** - **安装方法**:光盘安装、U盘安装。 - **注意事项**:检查硬件兼容性。 **3. Linux系统基础知识(三)基本使用命令** - **常用命令**:ls、cd、cp等。...