博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fork与vfork函数的用法
阅读量:3782 次
发布时间:2019-05-22

本文共 1406 字,大约阅读时间需要 4 分钟。

  1. fork()函数
    (1).使用fork()函数创建进程,将会返回两个值,在父进程中将会返回子进程的进程ID,在子进程中将会返回0
    (2).fork()将会复制主进程的数据空间,堆,栈等资源,也就是说子进程与父进程数据将不再共享,只共享了代码段
    (3)fork()函数在调用之后,将会直接执行父进程和子进程,无先后关系
  2. vfork()函数
    (1)使用vfork函数创建进程,返回值与fork函数一致
    (2)vfork函数执行之后,在子进程exec和exit(0)之前,子进程将与主进程共享数据空间
    (3)fork()函数在调用之后,必须在调用exec之后或exit(0)之后,父进程才将会被执行

 

一.测试fork()函数

#include 
#include
#include
int main(){ pid_t child; if((child=fork())==-1) { printf("Fork error"); exit(1); } if(child==0)//子进程 { printf("子进程的pid为%d\n",getpid()); exit(0); }else //主进程 { printf("主进程的pid为%d\n",getpid()); exit(0); }}

编译与执行:

 

//编译gcc fork.c -o fork//执行./fork

结果:一般来说,父进程和主进程是不分先后同时运行的,但是由于该程序代码较少,运行时可能因为子进程要执行复制等功能所以父进程一直比子进程快

主进程的pid为2449子进程的pid为2450

二:测试vfork()函数

 

#include 
#include
#include
int main(){ pid_t child; if((child=vfork())==-1) { printf("Fork error"); exit(1); } if(child==0)//子进程 { sleep(1); printf("子进程的pid为%d\n",getpid()); exit(0); }else //主进程 { printf("主进程的pid为%d\n",getpid()); exit(0); }}~

编译与执行与上述一致

 

//一秒之后同时显示,且总是子进程优先于主进程显示子进程的pid为2539主进程的pid为2538

 

转载地址:http://wymvn.baihongyu.com/

你可能感兴趣的文章
机器学习之sklearn.preprocessing.LabelBinarizer()的用法
查看>>
决策树剪枝的思想
查看>>
创建二叉树和遍历二叉树
查看>>
算法训练 区间k大数查询
查看>>
算法训练 K好数
查看>>
2021北京交通大学计算机专硕初试经验分享
查看>>
2021北京交通大学计算机专硕复试经验分享
查看>>
简单实现一个数组、链表
查看>>
关于从其他程序切回word文档时卡顿问题的解决办法
查看>>
Linux安装Java环境
查看>>
Java集合 ArrayList原理
查看>>
Git的基本操作
查看>>
简述128陷阱
查看>>
在spring boot项目中修改包名要注意的一些问题
查看>>
编写类实现从后台向前台返回所要求的数据
查看>>
spring boot的学习(1.创建一个初始的spring boot项目)
查看>>
Python的入门学习
查看>>
⑤mpvue 小程序框架 :初始化项目 分析项目结构
查看>>
⑦mpvue Flyio实现前后台交互
查看>>
操作系统:Java模拟CPU调度算法(非抢占短进程优先、可抢占优先权调度、多级反馈队列调度)
查看>>