第八章 进程控制 fork函数
来源:互联网 发布:小米网络音响 闹钟 编辑:程序博客网 时间:2024/06/05 22:40
头文件
1
2
#include<unistd.h>/*#包含<unistd.h>*/
#include<sys/types.h>/*#包含<sys/types.h>*/
函数原型
pid_t fork( void);
(pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)
返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1
函数说明
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
UNIX将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。
----------------------------------------------------------------------------------------------------------
#include "apue.h"int glob=6;char buf[]="a write to stdout\n";int main(void){ int var; pid_t pid; var=88; if(write(STDOUT_FILENO,buf,sizeof(buf)-1)!=sizeof(buf)-1) { err_sys("write error"); } printf("before fork\n"); if((pid=fork())<0) { err_sys("fork error"); } else if(pid==0) { //child glob++; var++; } else { printf("child pid is :%d\n",pid); //parent sleep(2); } printf("pid = %d,glob = %d,var = %d\n",getpid(),glob,var); exit(0);}
jiang@AY140524110335068908Z:~/new_apue$ ./a.out
a write to stdout
before fork
child pid is :11626
pid = 11626,glob = 7,var = 89
pid = 11625,glob = 6,var = 88
0 0
- 第八章 进程控制 fork函数
- APUE笔记---第八章 进程控制(函数fork、exit、wait等)
- 第八章 进程控制 wait函数
- 第八章 进程控制 waitpid函数
- 第八章 进程控制 exec函数
- 进程控制之fork函数
- 第八章 进程控制
- 第八章 进程控制
- 第八章 进程控制
- 第八章 进程控制
- 第8章(1) 进程控制 -fork函数
- 进程控制1--fork vfork函数
- 进程控制1--fork vfork函数
- Linux进程控制-fork函数-进程控制执行
- apue第八章 进程控制(3) exec函数族
- 《深入理解计算机系统》第八章 (一)关于子进程创建函数fork的理解
- [APUE]第八章 进程控制
- APUE第八章 进程控制
- D. DZY Loves Modification
- 1065. A+B and C (64bit)
- [数论] POJ 3126 Prime Path
- sql 中分割字符串的方法
- [HDOJ 3708][Vjudge 41282] Warrior Lady [动态规划]
- 第八章 进程控制 fork函数
- HDU 1548 A strange lift (BFS或最短路)
- Android中Cocos2d-X引擎响应按键消息
- Hive配置项的含义详解
- LPC Communication
- 7.12 POJ 3278 A - 广搜 基础
- DropDownListFor的传值问题
- 微信大会首批议程出炉 深度解析招行服务号是如何炼成的?
- 帝国详细的开发流程(教程)