#include <unistd.h>pid_t fork(void);#include <sys/types.h>#include <unistd.h>pid_t vfork(void);

返回:子进程中为0,父进程中为子进程ID,出错返回  -1

fork创建的新进程被称为子进程,该函数被调用一次但是返回两次,两次返回的区别是:在子进程中的返回值是,在父进程中的返回值是新的子进程的进程ID;

创建子进程,父进程哪个先运行根据系统的调度且复制父进程的内存空间。


vfork函数,创建子进程,但是子进程先运行且不复制父进程的内存空间。

fork函数示例:

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <errno.h>int     glob = 6;      /* external variable in initialized data */
char    buf[] = "a write to stdout\n";int
main(void)
{int        var;        /* automatic variable on the stack */pid_t  pid;var = 88;if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)perror("write error");printf("before fork\n"); /* we don't flush stdout */if ((pid = fork()) < 0) {perror("fork error");} else if (pid == 0) {        /* child */glob++;                    /* modify variables */var++;} else {sleep(2);             /* parent */}printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);exit(0);
}

编译之后运行结果:

andrew@andrew-Thurley:~/work/apue.2e$ ./a.out
a write to stdout
before fork
pid = 16935, glob = 7, var = 89
pid = 16934, glob = 6, var = 88
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <errno.h>int     glob = 6;      /* external variable in initialized data */int
main(void)
{int        var;        /* automatic variable on the stack */pid_t  pid;var = 88;printf("before vfork\n");   /* we don't flush stdio */if ((pid = vfork()) < 0) {perror("vfork error");} else if (pid == 0) {       /* child */glob++;                    /* modify parent's variables */var++;_exit(0);               /* child terminates */}/** Parent continues here.*/printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);exit(0);
}

编译之后运行结果:

andrew@andrew-Thurley:~/work/apue.2e$ ./a.out
before vfork
pid = 17047, glob = 7, var = 89

linux创建进程fork函数和vfork函数相关推荐

  1. linux中fork函数与vfork函数的区别

    fork函数跟vfork函数一样能够创建进程,它们主要有两个区别 (1)区别一: vfork直接使用父进程存储空间,不拷贝. (2)区别二: vfork保证子进程先运行,当子进程调用exit退出后,父 ...

  2. fork()函数与vfork()函数的区别

    1.fork()函数与vfork()函数 头文件: #include <sys/types.h> #include <unistd.h> 函数原型: pid_t fork(vo ...

  3. linux c之创建进程fork和vfork函数之间的区别

    1.函数简介 1).得到当前的进程id pid_t getpid(); 2).fork函数 要创建进程,必须调用fork函数, 系统调用fork用于派生一个进程,函数原型如下 #include< ...

  4. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  5. linux中fork()函数与vfork()函数的区别

    对于fork函数: 子进程只继承父进程的文件描述表,不继承但共享文件表项和i-node 父进程创建一个子进程之后,文件表项中的引用计数加1变为2,当父进程作close操作之后计数器减1,子进程还是可以 ...

  6. Linux创建进程必须fork么,Linux - fork() 创建进程

    Linux - fork() 创建进程 Linux - fork() 创建进程 介绍创建进程之前,先简单地介绍一下 Linux 下的进程内存布局. Stack - 所有函数的 local variab ...

  7. fork函数与vfork函数的区别

    系统调用fork(),vfork()的区别: fork():无参数,资源全部复制,父进程所有的资源都全部通过数据结构的复制,传递给子进程. vfork():无参数,除了task_struct结构和系统 ...

  8. linux创建进程读共享写复制,Linux进程创建之fork浅析

    在Linux 内核中,无时无刻不维护着进程,从进程的创建到进程销毁,每一个环境都有着复杂的细节.本篇介绍Linux 内核如何创建进程,深入理解 fork 函数以及子进程的创建,对理解多进程开发也至关重 ...

  9. 学习分享:fork函数与vfork函数的区别

    一.fork函数 (一)fork函数头文件 #include <sys/types.h>        #include <unistd.h> (二)fork函数原型 pid_ ...

最新文章

  1. π是无理数证明定积分_证明圆周率是无理数很容易?人类花了2000年!
  2. 当物联网实时工作时,城市才是“智能”的
  3. 电路设计中三极管和MOS管做开关用时的区别
  4. 转行数据分析师后悔了?脱颖而出才是关键!
  5. [渝粤教育] 西南科技大学 经济学概论 在线考试复习资料
  6. 【摘抄】其实我是间谍!
  7. 使用traceview进行Android性能测试(转)
  8. linux安装 wegt_linux 下安装wget
  9. html网页中获取vf数据到mysql_怎样从HTML网页中获取SQL数据库里的数据
  10. 课程设计题五:汽车尾灯控制器设计
  11. 数字电路:设计《三个开关控制一个灯的电路》
  12. 金山WPS c++ 二面面经
  13. 解锁三星bl锁有几种方法_三星S8有几种解锁方式?三星S8解锁方法介绍
  14. SAP中 关于BAPI_MATERIAL_SAVEDATA创建物料报错:字段MARA-MEINS/BAPI_MARA-BASE_UOM(_ISO)被定义为必需的字段; 它不包含条目
  15. codeforces 1520E. Arranging The Sheep(1400)
  16. ant-design-vue 1.7.8版本使用报错
  17. Java---登录页面及其接口的实现
  18. 判断门禁卡是否加密_离无卡生活更进一步!判断您的门禁卡能否被手机NFC功能模拟...
  19. Bat脚本实现定时演示PPT后自动关闭PPT
  20. matlab中功率谱密度,功率谱和功率谱密度

热门文章

  1. 安装、部署和卸载解决方案
  2. dos下常用网络相关命令解释
  3. NYOJ 589 糖果
  4. 网络流最大流Edmonds-Karp算法(模板)
  5. PHP中预定义的超全局数组
  6. 多线程中Local Store Slot(本地存储槽)[转]
  7. CommunityServer读取Blog分析(一)
  8. 单向链表操作之删除倒数第n个结点
  9. Ubuntu 12.04下安装GTK 2.24.10
  10. 机器学习--CART分类回归树