fork()函数 图解
code
#include<stdio.h>
#include <getopt.h>
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std; int main(int argc, char* argv[]) {
pid_t pid=;
int clients=;
printf("parent %d\n",getpid()); for(int i=;i<clients;i++)
{
//在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。
//在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。
//我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
pid=fork(); if( pid < (pid_t) )
{
printf("something wrong!");
}
if(pid <= (pid_t) )
{
/* child process or error*/
//sleep(1); /* make childs faster */
}
if(pid == (pid_t) )
{
printf("index%d child : ppid:%4d pid:%4d fpid:%4d\n",i,getppid(),getpid(),pid);
}
else
{
printf("index%d parent : ppid:%4d pid:%4d fpid:%4d\n",i,getppid(),getpid(),pid);
}
}
return ;
}
输出
parent index0 parent : ppid: pid: fpid:
index0 child : ppid: pid: fpid: index1 parent : ppid: pid: fpid:
index1 child : ppid: pid: fpid:
index1 parent : ppid: pid: fpid:
index1 child : ppid: pid: fpid: Program ended with exit code:
根据输出结果,我们画出下面这个结构图
可以看到,由于我是使用Xcode运行的代码,Xcode的pid是88994
以上代码运行后的进程pid是88993

两次循环以后,88993 fork 出了88996,88997,88998三个子进程,算上自身,一共有四个进程。
i=0时,88993创建了一个子进程88996,此时这两个进程的程序的i=1,也就是说,此时两个进程开始执行的位置是一样的,是从88993执行完第一次循环后的那个 位置开始执行。
参考:
https://www.cnblogs.com/love-jelly-pig/p/8471206.html
fork()函数 图解的更多相关文章
- Linux fork函数具体图解-同一时候分析一道腾讯笔试题
原创blog.转载请注明出处 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (p ...
- Linux C 中 fork() 函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...
- 进程间通信--fork函数
#include <unistd.h> pid_t fork(void); fork() creates a new process by duplicating the calling ...
- Fork函数初识
fork函数用于创建子进程,典型的调用一次,返回两次的函数.其中调用进程返回子进程的PID,而子进程则返回0.但是两个进程的执行顺序是不定的. fork函数调用完成以后父进程的虚拟存储空间被拷贝给了子 ...
- fork()函数详解
原文链接:http://blog.csdn.net/jason314/article/details/5640969 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函 ...
- fork函数
在Unix/Linux中用fork函数创建一个新的进程.进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程.该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程. ...
- Linux—fork函数学习笔记
fork()函数 在赋值语句pid = fork();之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的代码部分完全相同.> 两个进程中,原先就存在的那个被 ...
- linux fork函数与vfork函数,exit,_exit区别
man vfork: NAME vfork - create a child process and block parent SYNOPSIS #include <sys/types.h> ...
- fork()函数
现代操作系统提供的三种构造并发程序的方法: •进程 一个进程实体包括:代码段,数据段, 进程控制块 fork()函数:通过系统调用创建一个与原来一模一样的子线程,[用来处理请求信号,而父进程继续一直处 ...
随机推荐
- mysql数据库备份之主从同步配置
主从同步意义? 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave).因为复制是异步进行的,所以从服务 ...
- git便携版 添加git-bash到右键菜单
注册表路径 HKEY_CLASSES_ROOT\Directory\Background\shell 新建项取名open in git 默认设置为右键显示的名称 Git Bash Here 新建字符串 ...
- 【面试突击】- Mybatis-#{}和${}的区别
原文链接:mybatis中#{}和${}的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时 ...
- e.preventDefault()与e.stopPropagation()的区别
e.stopPropagation()阻止事件冒泡<table border='1'> <tr> <td><span>冒泡事件测试</span&g ...
- python之编码与解码、is 与==的区别
一.编码与解码 编码的过程其实就是采用一定的编码格式将unicode字符转换成str字符的过程 非ASCII码字符按字节为单位被编码成十六进制转义字符 解码采用的编码格式跟设置和环境有关 ascii ...
- Virtualization and Performance: Understanding VM Exits
翻译自:Virtualization and Performance: Understanding VM Exits 出于对特定指令 或 特定事件(eg. page fault)的响应而导致的VM ...
- ISCC之Re1
IDA打开,调试选ELF,跟踪main函数 发现有一个not_the_flag函数,跟进去 这里判断了一下a1的值是否为42,大致判断引号里面的有可能是flag,直接放到Linux下运行 提交不要有任 ...
- Random Forest(sklearn参数详解)
2016年08月17日 10:32:42 铭霏 阅读数:36874 版权声明:本文为博主原创文章,博主转载请附加原文链接并声明. https://blog.csdn.net/u012102306/ ...
- react native jpush
原文链接:https://blog.csdn.net/qq_38719039/article/details/80684144 1 npm install jpush-react-native --s ...
- WIN10笔记本屏幕亮度无法调节,一直是最高亮度
WIN+X,选择"计算机管理"; 系统工具->设备管理器->找到右边的"显示适配器"->右键先禁用,再启动下图设备