代码编织梦想

fork后发生的情况 1

可以确定的是 fork 之前 的 getpid 返回值 是 父进程的 看看 fork 之后 发生了什么变化

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
        pid_t pid = getpid();

        printf("father pid is %d\n",getpid());

        fork();

        printf(" pid is %d\n",getpid());

        return 0;

}

在这里插入图片描述
可以看到 为啥 fork 之后 只有 一个 printf 而现在多出了一个

在这里插入图片描述
在fork 之后 会拷贝出子进程出来

fork后发生的情况 2

加入返回值 也是会拷贝出两份 但是不确定归属
可以确定的是 我们 fork 之后 都会 有父进程 那么可以这么实验

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
        pid_t pid_bf = getpid();

        printf("before father pid is %d\n",pid_bf);

        pid_t relust =fork();

        pid_t pid_af = getpid();

        printf("after father pid is %d\n",pid_af);

        if(pid_af == pid_bf)
                printf("  father fork return data is %d\n",relust);
        else
                printf("  child fork return data is %d\n",relust);

        return 0;

}
 

在这里插入图片描述

可以发现 fork 之后 会产生 子进程 子进程是父进程拷贝出来的 所以 第一个 if fork返回值是子进程的 同时 if 条件语句也是 父进程的 else fork 返回值为零 就只能是子进程的 所以可以证明 fork() >0 是 父进程的条件 fork()==0是子进程的条件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_59349642/article/details/128015290

fork之后父子进程的内存关系-爱代码爱编程

1.fock()调用的基本语义 #include<unistd.h> pid_t fork(void); //父进程返回子进程的pid,子进程返回0,错误返回-1 fork()创建了一个心的进程(child)

fork()与多线程_nedwons的博客-爱代码爱编程_fork线程

https://blog.csdn.net/together_cz/article/details/74762850  一、fork()函数     在操作系统的基本概念中进程是程序的一次执行,且是拥有资源的最小单位和调度单位(在引入线程的操作系统中,线程是最小的调度单位)。在Linux系统中创建进程有两种方式:一是由操作系统创建,二是由父进程创建进程

fork函数到底做了什么?-爱代码爱编程

物理地址和逻辑地址(或称虚拟地址)的概念。 从逻辑地址到物理地址的映射称为地址重定向。分为: 静态重定向--在程序装入主存时已经完成了逻辑地址到物理地址和变换,在程序执行期间不会再发生改变。动态重定向--程序执行期间完成,其实现依赖于硬件地址变换机构,如基址寄存器。   逻辑地址:CPU所生成的地址。CPU产生的逻辑地址被分为 : p (页

fork()函数的底层实现原理_李嘉图y的博客-爱代码爱编程_fork原理

在Linux中,fork函数是非常重要的函数,他从一个已存在的进程中创建一个新进程;新进程为子进程,而原进程称为父进程。接下来我们一起来系统的解析一下fork函数的调用原理: 1、fork函数原型 #include p

linux fork隐藏的开销-过时的fork(正传)_dog250的博客-爱代码爱编程

本文来自《Linux fork那些隐藏的开销》 fork是一个拥有50年历史的陈年系统调用,它是一个传奇!时至今日,它依旧灿烂。 一个程序员可以永远不用read/write,也可以不懂mmap,但必须懂fork。这是一种

unix/linux fork/exec的前世今生-爱代码爱编程

本文是《Linux fork那些隐藏的开销》的前传《Unix/Linix fork前传》。转载注明来自公众号“Linux阅码场”。 昨天(好像是上周的事了,暴雨天?),我发了个朋友圈,承诺给大家扒拉扒拉fork和exe

linux下利用fork创建子进程产生的疑问(个人猜想)_盖世英雄来了的博客-爱代码爱编程_#include main(){ int p1,p2,p3; p1=fork();

C语言中的fork()讲解 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。     一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制

fork函数-爱代码爱编程

fork()的基础知识 父进程通过调用fork函数来创建一个新的运行的子进程。 父进程和子进程之间最大的区别就是PID不同 1)在父进程中,fork返回新创建子进程的PID; 2)在子进程中,fork返回0; 3)如果出现错

fork,wait等基本系统调用-爱代码爱编程

这篇文章主要通过一些题目来巩固一些基础知识,熟悉一些底层原理 先来放一些基础,再来一些题目吧 PCB存放 每当我们创建一个新进程,有很多信息都需要记录,比如PID,权限,用户组,进程之间的关系,进程状态等等,他们都将被保存在一个数据结构当中,叫做task_struct,就是Process Control Block。 我们所谓的PCB主要存在了内核

java fork/join概述-爱代码爱编程

前言 从JDK1.7开始,Java提供ForkJoin框架用于并行执行任务,它的思想就是基于“分治”,它将一个大任务分解(Fork)成一系列子任务,子任务可以继续往下分解,当多个不同的子任务都执行完成后,可以将它们各自的结果合并(Join)成一个大结果,最终合并成大任务的结果: 使用示例 ForkJoinTask的抽象方法exec由Recursive

fork函数-爱代码爱编程

fork函数 fork函数简介实验前的准备1.安装虚拟机VMware,配置系统环境2.学习Linux的命令使用3.拷入代码,运行产生实验结果分析fork函数fork2()fork1()fork9()fork7()fork8()fork14()总结 fork函数简介 fork()函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一

linux中fork和exec的区别,linux shell中fork、source、exec的区别-爱代码爱编程

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、histo

Linux fork()/vfork()-爱代码爱编程

这里写目录标题 fork函数介绍利用fork()创建父子进程vfork函数介绍利用vfork()创建父子进程fork()和vfork()的主要区别 fork函数介绍 在Linux系统内,创建子进程的方法是使用系统调用fork()函数。fork()函数是Linux系统内一个非常重要的函数,它与我们之前学过的函数有一个显著的区别:fork()函数

Fork/Join工作原理解析-爱代码爱编程

一、如何高效利用CPU 在介绍Fork/Join框架之前,思考一个问题,在多线程的情况下,如何才能高效的利用CPU,以常用的线程池为例,线程池的线程数设置多少合适? 通常调整线程池中的线程数量其核心目的就是为了能够充分的利用CPU和内存资源,从而最大限度的提高程序的性能。在实际工作中,我们可能会根据任务类型的不同而采取不同的策略。按照一个任务执行过程中

linux c++ 通信 - fork_伽蓝之堂的博客-爱代码爱编程

Linux C++ 通信 - fork 明镜止水,长话短说。 目录 Linux C++ 通信 - forkfork函数防止僵尸进程完善fork代码 fork函数 fork是一个用来创建进程的函数,

fork函数与vfork函数的区别_法外狂徒张③的博客-爱代码爱编程

系统调用fork(),vfork()的区别: fork():无参数,资源全部复制,父进程所有的资源都全部通过数据结构的复制,传递给子进程。 vfork():无参数,除了task_struct结构和系统空间堆栈外,其他的资源全部通过数据结构指针的方式进行复制遗传,所以vfork()出来的是线程而不是进程。vfork()是出于效率的考虑而设计的。 fork与

linux fork 写时复制_fork写时拷贝-爱代码爱编程

文章目录 前言一、fork 简介1.1 fork 简介1.2 写时拷贝的引入1.3 fork + exec 组合分离方式的好处 二、fork 源码解析2.1 fork源码简介2.2 写时拷贝源码解析2.3