进程A创建了进程B,则称进程A为父进程,进程B为子进程

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main()
{pid_t pid;pid_t pid2;pid_t retpid;pid = getpid();printf("father: id=%d\n",pid);retpid = fork();pid2 = getpid();printf("after fork: pid = %d\n",pid2);if (pid==pid2){printf("this is father print,retpid = %d\n",retpid);}else{printf("this is child print,retpid=%d,child pid = %d\n",retpid,getpid());}return 0;
}


pid_t fork(void);
返回值为0,代表当前进程是子进程
返回值为非负数(子进程pid),代表当前进程为父进程

#include <sys/types.h>
#include <unistd.h>int main()
{pid_t pid;int data = 10;printf("father: id=%d\n",getpid());pid = fork();if (pid>0){printf("this is father print,pid = %d\n",getpid());}else if(pid==0){printf("this is child print,child pid = %d\n",getpid());data=data+10;}printf("data=%d\n",data);return 0;
}

现在Linux采用Copy-On-Write(写时拷贝),当子进程不修改data这个变量时,是父进程共享这个变量,只有要修改data值时才会在自己的地址空间拷贝data变量。
旧的Liunx是把变量都先拷贝一份。
父、子进程共享正文段。

fork创建一个子进程的一般目的:
(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是最常见的——父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,是子进程处理此请求。父进程则继续等待下一个服务请求到达。
(2)一个进程要执行一个不同的程序,这对shell是常见的情况。这种情况下。子进程从fork放回后立即调用exec。

vfork函数和fork函数的区别:
(1)vfrok直接使用父进程存储空间,不拷贝。
(2)vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>int main()
{pid_t pid;int cnt = 0;pid = vfork();if (pid>0){while(1){printf("cnt=%d\n",cnt);printf("this is father print,pid = %d\n",getpid());sleep(1);}}else if(pid==0){while(1){printf("this is child print,child pid = %d\n",getpid());sleep(1);cnt++;if(cnt == 3){exit(0);}}}return 0;
}

fork、vfork函数及父进程与子进程相关推荐

  1. linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID

    请教linux下c语言函数fork父进程打印子进程的PID 关注:296  答案:2  信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...

  2. 进程间通信-父进程和子进程

    进程相关概念; 在Linux当中,使用ps指令查看系统中有哪些进程 ps -aux 实际工作中有ps加grep配合查看系统中是否存在,某一进程 Ps -aux|grep **: 进程标识符:每一个进程 ...

  3. Linux系统编程之进程退出,父进程等待子进程退出

    1.首先讲一下进程的退出 进程的退出分为正常退出和异常退出: 正常退出: (1)main函数调用return (2)进程调用exit(),标准C库 (3)进程调用_exit()或_Exit(),属于系 ...

  4. Linux 的父进程和子进程的执行情况(附有案例代码)

    系列文章目录 该文章主要是针对面试做大致的了解,通俗易懂!!! 一.父进程.子进程的定义 1.父进程 指已创建一个或多个子进程的进程.在Linux里,除了进程0以外的所有进程都是由其他进程使用系统调用 ...

  5. 进程(父进程、子进程、init进程)

    父进程和子进程.init进程之间的关系 通过上节我们知道,子进程是通过fork()函数创建的,相当于父进程的一个复制品,子进程和父进程除了子进程复制了父进程还有什么关系呢? 1.子进程和父进程属于同一 ...

  6. 2022.8.31 进程中无名管道的特点,无名管道的创建,为何无名管道只能能够实现具有亲缘关系的进程间的通信,以及实现利用无名管道父进程给子进程发送消息的完整代码。

    无名管道通信 无名管道特点: (1):只能用于具有亲缘关系的进程之间的通信.(父子进程或兄弟进程) (2):是一个半双工的通信模式,具有固定的读端和写端.(fd[0]固定为读端,fd[1]固定为写端) ...

  7. 信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束

    本教程基于 Ubuntu 20.10 gcc 10.2.0. 示例程序如果不能正常编译和执行,说明您系统和工具版本与我的不匹配,请自行查阅资料. 0 概述 先给出该信号的描述: Signal Valu ...

  8. linux的子进程和父进程,[Linux进程]在父进程和子进程中分别对文件进行操作

    [Linux进程]在父进程和子进程中分别对文件进行操作 发布时间:2020-04-10 19:36:49 来源:51CTO 阅读:917 作者:银河星君 /*子进程和父进程同时对一个文件进行写操作导致 ...

  9. Linux 进程、父进程、子进程

    进程和程序的区别 一. 进程是动态的,程序是静态的:程序是有序代码的集合,进程是程序的执行.进程有核心态/用户态. 二. 进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可以长久保存 三.进 ...

最新文章

  1. elasticsearch如何安全重启节点
  2. 急速JavaScript全栈教程
  3. go程序开发注意事项
  4. ITK:写一个TIFF图像
  5. 【Linux】一步一步学Linux——dirname命令(35)
  6. java 车站分级问题_【NOIP2013 普及组】车站分级
  7. 2万8千张图片如何用python组成一张(简洁明了附源码)
  8. linux设置板卡时间,嵌入式VS-RK3288板卡 Linux 修改BOOTDELAY介绍
  9. 利用VBA在EXCLE2010和2007中找回2003式的经典菜单和工具栏
  10. 【报告分享】新世代、新圈层:2020垂直圈层营销报告(附下载链接)
  11. 玩转Python大数据分析 《Python for Data Analysis》的读书笔记-第08页
  12. 解决服务器被黑上不了网的问题
  13. 【HAVENT原创】前端使用 jsrsasign 进行 RSA 加密、解密、签名、验签
  14. 这条命令帮我在一分钟内修改了200台远程服务器密码!
  15. 文件名 绝对路径与相对路径
  16. python读取.ttf字体文件
  17. 计算机无法自动搜索更新驱动程序,Win10怎么设置自动搜索更新驱动软件
  18. 如何让百度收录你的网站
  19. 算法基础14 —— 图论入门之弗洛伊德算法(Floyed + Dijkstra + Bellman-Ford + SPFA)
  20. gluster分布式存储总结与实践

热门文章

  1. k-近邻算法及朴素贝叶斯算法
  2. maven-svn-revision-number-plugin使用总结
  3. 双一流大学最牛计算机专业,42所双一流大学2000-2018年国家三大奖统计,科研实力一目了然...
  4. 出现 I/Choreographer: Skipped 160 frames! The application may be doing too much work on its main thre
  5. Java技术类校招面试题汇总:算法题+JVM
  6. 上海闵行做网站,闵行网站建设-品划告诉您如何选择域名
  7. SDRAM停产怎么办?Bordisonmemory承诺-长寿命不停产,量产再无忧!
  8. C代码实现将一颗树转换成二叉树(给定树)
  9. html美化select样式,select样式美化(简单实用)
  10. “昔之善战者,先为不可胜,以待敌之可胜”的理解