fork函数的介绍和使用
在学习操作系统的时候,肯定会接触到进程(Process)这个概念。
下面介绍在Unix(或者Linux)下利用fork函数创建进程的方法。
fork函数是在<unistd.h>头文件中被定义,是系统的一个服务,
其定义原型为 pid_t fork(void) ,其中pid_t是一个宏定义 #define pid_t int
fork函数是在当前进程中创建一个新的进程,这个新的进程叫做子进程(child process)。当前进程称作父进程(parent process)。系统负责创建父进程的副本,包括代码段,堆和栈的复制。
fork函数是“调用一次,返回两次”。即在父进程中返回生成子进程的ID,(因为父进程拥有不只一个的子进程),在子进程中返回一个整数0(因为子进程只有一个父进程,可以通过调用函数getppid()返回父进程的ID)。如果创建失败,返回-1。
好,下面给出一个简单的例子:
#include <unistd.h>
#include <stdio.h>
int main()
{pid_t pid; //定义进程ID变量int count=0; //定义计数器pid = fork(); //调用fork函数/** 调用fork函数将创建一个新的进程* 它们共享同一段程序代码* 并且父进程和子进程会相继执行下面的程序代码*///调试代码printf( "This is first time, pid = %d\n", pid );printf( "This is secONd time, pid = %d\n", pid );count++; //计数器自增printf( "count = %d\n", count );if ( pid>0 ){//父进程执行此段代码printf( "This is the parent process,the child has the pid:%d\n", pid );}else if ( !pid ){//子进程执行此段代码printf( "This is the child Process.\n")}else{//出错printf( "fork failed.\n" );}//调试代码printf( "This is third time, pid = %d\n", pid );printf( "This is fouth time, pid = %d\n", pid );return 0;}
输出结果:
从输出结果,我们可以看出,父进程和子进程都执行了程序代码。而且从count的值可以知道,父进程和子进程分别拥有count变量,即count变量不是共享变量。所以两次打印count值都是1,而不是2。
fork函数的介绍和使用相关推荐
- Linux系统编程:fork函数的使用【循环创建N个子线程】
fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...
- c++中的fork函数_linux c语言 fork() 和 exec 函数的简介和用法
linux c语言 fork() 和 exec 函数的简介和用法 假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdli ...
- Linux中fork函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不 ...
- linux中fork函数及子进程父进程执行顺序
目录 一.fork入门知识 二.fork进阶知识 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以 ...
- 操作系统---fork函数解析与例题详解
fork的基本知识 函数原型:pid_t fork( void); 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1 一个现有进程可以调用fork函数创建一 ...
- fork函数详解(fork就是分叉的意思, 很形象)
转载地址: http://blog.sina.com.cn/s/blog_7582409f0100v6cp.html, 感谢原创者. (注意: 代码中的/n貌似应该是\n) ...
- fork()函数创建子进程
APUE–fork()函数介绍 文章目录 APUE--fork()函数介绍 一.fork()系统调用介绍 1.fork()创建子进程特点 2. 子进程的特点 二.代码示例 1.fork()创建子线程 ...
- Linux中fork()函数详解
Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...
- c++中的fork函数_fork( )函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...
最新文章
- R语言ggplot2可视化基本散点图(设置X轴使用对数坐标)、并把成对的数据点用线条(line)连接起来、自定义配置线条颜色(Connecting Paired Points with lines)
- Ubuntu14.04 x64 zabbix 3.0 安装
- Java™ 教程(Collection接口)
- dbunit java_Java – 让DbUnit使用Hibernate事务
- 奥斯陆大学计算机,奥斯陆大学雅思要求
- javascript 日常
- CAN和CAN FD
- 操作系统---IO设备
- python阿拉伯数字转中文_阿拉伯数字转换成中文的python代码
- 基于winrm实现远程操作win
- PyTorch搭建双向LSTM实现时间序列预测(负荷预测)
- 柴静调查:穹顶之下_调查:HTML5数据列表
- 如何防止你的爬虫被网管一巴掌拍死
- 1.3-15:苹果和虫子
- 解决Ubuntu22.04wps打不开的问题
- 万分之二用百分之怎么表示_万分之三怎么写?
- jsp页面适应手机屏幕_Jsp编写的页面如何适应手机浏览器页面
- Mybatis入门(二)
- 人工智能换脸技术python_人工智能几行代码实现换脸,python+dlib实现图文教程
- 11. 形态学膨胀、腐蚀、开运算、闭运算