在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
    1)在父进程中,fork返回新创建子进程的进程ID;
    2)在子进程中,fork返回0;
    3)如果出现错误,fork返回一个负值;

#include <unistd.h>
#include <stdio.h>
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的面试题
例子1:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main(void)
{int i;for(i=0; i<2; i++){fork();printf("%d.-\n",i);}wait(NULL);wait(NULL);return 0;
}


答案:8

解析1:
fork()系统调用的特性,
fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid),这是众为周知的。
还有一个很重要的东西是,在fork()的调用处,整个父进程空间会原模原样地复制到子进程中,包括指令,变量值,程序调用栈,环境变量,缓冲区,等等。

解析2:

linux中的fork函数详解相关推荐

  1. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  2. 【Linux系统编程】fork()函数详解

    00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...

  3. linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解

    Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...

  4. getpid php,对python中的os.getpid()和os.fork()函数详解

    如下所示: import os import sys import time processNmae = 'parent' print "Program executing ntpid:%d ...

  5. linux send与recv函数详解

    linux send与recv函数详解 1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nb ...

  6. Linux中的ps指令详解

    [时间]2018.12.16 [题目]Linux中的ps指令详解 转载地址:https://www.cnblogs.com/exe19/p/5511733.html 概述 要对进程进行监测和控制,首先 ...

  7. linux内核 recvfrom,Linux系统调用-- recv/recvfrom 函数详解

    Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...

  8. python getattr_Python中的getattr()函数详解:

    标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...

  9. timm 视觉库中的 create_model 函数详解

    timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...

最新文章

  1. 通用目标检测的review
  2. Python编程专属骚技巧3
  3. 如何正确理解近似点梯度下降算法
  4. M1芯片MacBook Pro/Air能兼容哪些软件?M1 mac软件兼容一览表
  5. 周期均方根和有效值的区别_如何判断化学锚栓和膨胀锚栓的区别
  6. libjpeg-turbo(2)
  7. Mac终端使用技巧 切换到其他路径和目录
  8. VPC中安装Windows Server 2008
  9. html制作公众号,自制微信公众号一键排版工具
  10. 吉林大学计算机学院控制与应用实验室,2019计算机考研吉林大学国家物联网虚拟仿真实验教学中心简...
  11. c语言英文字母降序排列,英文单词排序
  12. 80004005错误代码_关于访问共享时出现80004005错误
  13. 解决各种中文乱码问题
  14. 阿里云RDS数据库如何远程访问
  15. 在html中写for循环表格trtd,嵌套的HTML表格在javascript for循环
  16. 针对勒索病毒WannaCrypt微软官方应对指南
  17. 英语六级写作必备短语词汇1
  18. Openfire jsjac构建webIM
  19. Python集合关系解读:Python语言中都有哪些集合关系?
  20. PHP加密函数与解密函数详解

热门文章

  1. 【题解】Luogu P5279 [ZJOI2019]麻将
  2. MySQL与SQLServer的区别(一千条语句)
  3. python第四篇:linux命令行总结 + 自动备份Python程序
  4. codeforces 667B B. Coat of Anticubism(水题)
  5. angularjs ngRoute的使用简单例子
  6. SQL Server报“GUID应包含带4个短划线的32位数”
  7. the more wites of color
  8. 《图谋职场——最经济的图形沟通》 专题讲座圆满成功
  9. 线程的切入和切出(切入: 一个线程被系统选中占用处理器开始或继续运行)
  10. GenericFactoryMethod泛型工厂模式实现简单IOC功能