在学习操作系统的时候,肯定会接触到进程(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函数的介绍和使用相关推荐

  1. Linux系统编程:fork函数的使用【循环创建N个子线程】

    fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...

  2. c++中的fork函数_linux c语言 fork() 和 exec 函数的简介和用法

    linux c语言 fork() 和 exec 函数的简介和用法 假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdli ...

  3. Linux中fork函数详解

     一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不 ...

  4. linux中fork函数及子进程父进程执行顺序

    目录 一.fork入门知识 二.fork进阶知识 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以 ...

  5. 操作系统---fork函数解析与例题详解

    fork的基本知识 函数原型:pid_t fork( void); 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1 一个现有进程可以调用fork函数创建一 ...

  6. fork函数详解(fork就是分叉的意思, 很形象)

           转载地址: http://blog.sina.com.cn/s/blog_7582409f0100v6cp.html, 感谢原创者.       (注意: 代码中的/n貌似应该是\n) ...

  7. fork()函数创建子进程

    APUE–fork()函数介绍 文章目录 APUE--fork()函数介绍 一.fork()系统调用介绍 1.fork()创建子进程特点 2. 子进程的特点 二.代码示例 1.fork()创建子线程 ...

  8. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  9. c++中的fork函数_fork( )函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...

最新文章

  1. R语言ggplot2可视化基本散点图(设置X轴使用对数坐标)、并把成对的数据点用线条(line)连接起来、自定义配置线条颜色(Connecting Paired Points with lines)
  2. Ubuntu14.04 x64 zabbix 3.0 安装
  3. Java™ 教程(Collection接口)
  4. dbunit java_Java – 让DbUnit使用Hibernate事务
  5. 奥斯陆大学计算机,奥斯陆大学雅思要求
  6. javascript 日常
  7. CAN和CAN FD
  8. 操作系统---IO设备
  9. python阿拉伯数字转中文_阿拉伯数字转换成中文的python代码
  10. 基于winrm实现远程操作win
  11. PyTorch搭建双向LSTM实现时间序列预测(负荷预测)
  12. 柴静调查:穹顶之下_调查:HTML5数据列表
  13. 如何防止你的爬虫被网管一巴掌拍死
  14. 1.3-15:苹果和虫子
  15. 解决Ubuntu22.04wps打不开的问题
  16. 万分之二用百分之怎么表示_万分之三怎么写?
  17. jsp页面适应手机屏幕_Jsp编写的页面如何适应手机浏览器页面
  18. Mybatis入门(二)
  19. 人工智能换脸技术python_人工智能几行代码实现换脸,python+dlib实现图文教程
  20. 11. 形态学膨胀、腐蚀、开运算、闭运算

热门文章

  1. The ACM Publishing System (TAPS) ACM出版系统上传文章 操作流程
  2. 通信算法之五十九:SC_FDE系统中的匹配滤波与频偏纠正
  3. 规范有效的需求变更管理,分7步走。
  4. 易车第三季营收27亿 张序安:继续专注执行三个战略重点
  5. RT-Thread实时操作系统简介
  6. DIN数据处理与理解
  7. java计算机毕业设计建筑劳务监管平台MyBatis+系统+LW文档+源码+调试部署
  8. java之高级的IO流,字符流与字节流
  9. 公式居中,编号右对齐 超级超级简单方法
  10. javascript trim方法