博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux --> fork()详解
阅读量:4941 次
发布时间:2019-06-11

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

fork()详解

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

  fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

      1)在父进程中,fork返回新创建子进程的进程ID;
      2)在子进程中,fork返回0;
      3)如果出现错误,fork返回一个负值;

  fork出错可能有两种原因:

      1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。

      2)系统内存不足,这时errno的值被设置为ENOMEM。

例子:

#include 
#include
int main () { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d/n",getpid()); printf("我是爹的儿子/n");//对某些人来说中文看着更直白。 count++; } else { printf("i am the parent process, my process id is %d/n",getpid()); printf("我是孩子他爹/n"); count++; } printf("统计结果是: %d/n",count); return 0;}

结果是:

i am the child process, my process id is 5574 我是爹的儿子 统计结果是: 1 i am the parent process, my process id is 5573 我是孩子他爹 统计结果是: 1

  在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。可以通过fork返回的值来判断当前进程是子进程还是父进程。

  创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。

  每个进程都有一个独特(互不相同)的进程标识符(process ID),可以通过getpid()函数获得,还有一个记录父进程pid的变量,可以通过getppid()函数获得变量的值。

 

转载于:https://www.cnblogs.com/jeakeven/p/5300967.html

你可能感兴趣的文章
HTML5 Canvas 超炫酷烟花绽放动画教程
查看>>
sklearn——数据集调用及应用
查看>>
设置span的宽度
查看>>
234. Palindrome Linked List
查看>>
linux部分命令的全称
查看>>
CSS 制作的导航菜单
查看>>
libaio.so.1()(64bit) is needed by MySQL-server 问题解决办法
查看>>
概率论与数理统计中基于有限样本推断总体分布的方法,基于总体未知参数区间估计的假设检验方法之讨论,以及从数理统计视角重新审视线性回归函数本质...
查看>>
洛谷P1111 修复公路
查看>>
图论存图方式小结
查看>>
购物车的实现原理
查看>>
XML序列化的注意事项
查看>>
POJ 3104 二分
查看>>
bzoj 3874: [Ahoi2014]宅男计划
查看>>
Linux上的SQL Server的起步
查看>>
AFNetworking自带的解析图片的方法
查看>>
Apache与Nginx的区分比较
查看>>
python 模块的介绍(一)
查看>>
数据结构 单向动态链表的建立和输出
查看>>
前端实现动画
查看>>