linux中的fork函数详解
在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函数详解相关推荐
- Linux中fork()函数详解
Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...
- 【Linux系统编程】fork()函数详解
00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...
- linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解
Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...
- getpid php,对python中的os.getpid()和os.fork()函数详解
如下所示: import os import sys import time processNmae = 'parent' print "Program executing ntpid:%d ...
- linux send与recv函数详解
linux send与recv函数详解 1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nb ...
- Linux中的ps指令详解
[时间]2018.12.16 [题目]Linux中的ps指令详解 转载地址:https://www.cnblogs.com/exe19/p/5511733.html 概述 要对进程进行监测和控制,首先 ...
- linux内核 recvfrom,Linux系统调用-- recv/recvfrom 函数详解
Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...
- python getattr_Python中的getattr()函数详解:
标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...
- timm 视觉库中的 create_model 函数详解
timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...
最新文章
- 通用目标检测的review
- Python编程专属骚技巧3
- 如何正确理解近似点梯度下降算法
- M1芯片MacBook Pro/Air能兼容哪些软件?M1 mac软件兼容一览表
- 周期均方根和有效值的区别_如何判断化学锚栓和膨胀锚栓的区别
- libjpeg-turbo(2)
- Mac终端使用技巧 切换到其他路径和目录
- VPC中安装Windows Server 2008
- html制作公众号,自制微信公众号一键排版工具
- 吉林大学计算机学院控制与应用实验室,2019计算机考研吉林大学国家物联网虚拟仿真实验教学中心简...
- c语言英文字母降序排列,英文单词排序
- 80004005错误代码_关于访问共享时出现80004005错误
- 解决各种中文乱码问题
- 阿里云RDS数据库如何远程访问
- 在html中写for循环表格trtd,嵌套的HTML表格在javascript for循环
- 针对勒索病毒WannaCrypt微软官方应对指南
- 英语六级写作必备短语词汇1
- Openfire jsjac构建webIM
- Python集合关系解读:Python语言中都有哪些集合关系?
- PHP加密函数与解密函数详解
热门文章
- 【题解】Luogu P5279 [ZJOI2019]麻将
- MySQL与SQLServer的区别(一千条语句)
- python第四篇:linux命令行总结 + 自动备份Python程序
- codeforces 667B B. Coat of Anticubism(水题)
- angularjs ngRoute的使用简单例子
- SQL Server报“GUID应包含带4个短划线的32位数”
- the more wites of color
- 《图谋职场——最经济的图形沟通》 专题讲座圆满成功
- 线程的切入和切出(切入: 一个线程被系统选中占用处理器开始或继续运行)
- GenericFactoryMethod泛型工厂模式实现简单IOC功能