fork()函数解析

fork()函数有关实验及解析 fork()是什么? fork()的原理其实非常简单:当你调用fork()时,会产生一个子进程,这个子进程会拥有父进程所有的东西(记住,是所有)更通俗一点来讲,在函数代码段中,调用fork后,调用一次,返回两次,如果返回0,则代表当前的进程是子进程,不是的话则是父进程。接下来我们看段代码深入理解一下: int main(int argc, char *argv[]) { pid_t pi... 阅读详情

在了解fork()函数前,我们先来看个题

<span style="font-size:18px;">#include<stdio.h>
#include <unistd.h>
int main( ) {
    fork( );
    fork( );
    fork( );
    printf(“hello\n”);
    return 0;
}</span>
这个题目会输出几个hello呢?

接下来,我们去Linux中先去寻找这个答案;

不知道你是否知道是这个答案呢?如果不对,不要心急,我们来一步步的了解fork()这个函数

头文件
#include<unistd.h>/*#包含<unistd.h>*/
#include<sys/types.h>/*#包含<sys/types.h>*/
函数原型
pid_t fork( void);
(pid_t是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)
返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1
函数说明
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
UNIX将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。

接下来,我们用一个小程序再去看看他的特性


这就可以看出,子进程它返回的的确是0;

接下来,我们把程序稍稍修改一下,在看看他们的改变


结果为


从上图便可以推断出父子进程的相互关系,以及它是如何产生的。

fork() 函数详解示例代码 Linux 中 fork() 函数详解,相关教程链接如下: http://blog.youkuaiyun.com/tennysonsky/article/details/45165811 立即下载

相关推荐

从理论到代码:手把手教你用Matlab复现MMC的HSS阻抗模型(附避坑指南)

本文详细介绍了如何使用Matlab复现MMC的HSS阻抗模型,涵盖谐波状态空间(HSS)理论、代码实现步骤及常见问题解决方案。通过谐波线性化和序阻抗建模技术,帮助工程师准确分析MMC的阻抗特性,并提供避坑指南以解决矩阵维度错误、收敛性问题和频域转换陷阱等难点。

weixin_42561040的博客 357

linux中fork()函数详解(原创!!实例讲解)

一、fork入门知识 二、fork进阶知识 三、fork高阶知识

jason的专栏 44万+

WKWebView 白屏问题,WKWebView request body丢失问题

1,WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会...

weixin_37543822的博客 736

fork() 函数详解

一、fork入门知识 进程的定义: 进程是一个执行中的程序的实例,是系统进行资源分配和调度的一个独立单位。 PCB是进程存在的唯一标识。PCB应常驻内存,不管在linux还是windows中都有专门区域存储每个进程的PCB。 进程的创建: 子进程可以继承父进程所拥有的所有资源,当子进程被撤销时,应将其从父进程那里获得的所有资源归还给父进程,在撤销父进时,也必须同时撤销其所有子进程。 ...

weixin_42121713的博客 2464

不刷机!Jetson AGX Orin无损更新内核与设备树的两种安全方法(附备份恢复脚本)

本文详细介绍了Jetson AGX Orin在不刷机的情况下安全更新内核与设备树的两种方法,包括extlinux.conf动态加载和分区精准刷新方案。通过备份恢复脚本和工业级灾备方案,确保零数据丢失,适用于边缘AI和机器人等关键场景。

weixin_40192258的博客 308

CentOS 7下Multipath多路径存储的实战配置与性能优化

本文详细介绍了在CentOS 7系统中配置与优化Multipath多路径存储的完整实战流程。从安装部署、核心配置文件解读,到性能调优与生产环境避坑指南,全面解析如何利用Device Mapper Multipath构建高可用、负载均衡的存储链路,提升存储系统可靠性与I/O性能。

weixin_29278805的博客 320

在用户空间下解析fork()函数

在用户空间下解析fork()函数       在Linux编程中创建子进程的系统调用(system call)是通过fork()函数实现的,这是Linux环境下创建新进程的唯一途径。       fork()函数在Linux Programmer’s Manual中的介绍如下:       NAME                   fork – create a child

echo 'narcissus' 1651

STM32CubeMX HAL实战:JY901S串口数据解析与姿态解算

本文详细介绍了如何使用STM32CubeMX HAL库实现JY901S六轴姿态传感器的串口数据解析与姿态解算。从基础硬件连接到USART3配置,再到数据接收状态机实现和传感器校准方法,最后深入讲解互补滤波与Mahony滤波算法在姿态解算中的应用。通过实战代码演示,帮助开发者快速掌握无人机、机器人等项目中关键姿态数据处理技术。

weixin_28703489的博客 432

fork()函数

下面的程序执行输出几个hello? 1 2 3 4 5 6 7 8 9 #include #include int main( ) {     fork( );     fork( );     fork( );     printf(“hel

Stand1210的博客 382

C# ArcGIS Engine二次开发——实现“加载shp文件”

private void AddShpDataToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog OpFileDialog=new OpenFileDialog();//OpenFileDialog:打开文件对话框 OpFileDialog.Title="添加矢量数据"; OpFileDialog.Filter="(*.shp)|*.shp";//filter:过滤器;"(*.shp)|*.shp"

weixin_42191203的博客 5254

逆向拆解dy接口a_bogus 1.0.1.19版本核心算法(纯算版)第二部分

本文深入解析了dy接口a_bogus 1.0.1.19版本的核心算法,重点介绍了逆向分析的基础方法论、魔改Base64编码识别与还原、随机数生成与位运算解析等关键技术。通过详细的代码示例和实用技巧,帮助开发者掌握逆向工程中的关键步骤,特别是针对a_bogus参数的生成逻辑和混淆处理。

weixin_29288313的博客 408

Linux中fork()函数解析

1. fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,这个新的进程就成为子进程。一个进程调用fork()函数以后,系统先给新的进程分配资源,例如存储数据可代码空间。然后把原来进程的值都复制到新的进程当中,只有少数值与原来不同。调用fork()函数之后,fork()之后的代码一定是两个进程同时执行,而之前的代码已经由父进程执行完毕。for()函数返回值:返回一个大于0的值给父进程,...

S.Mming 424

运放+MOS恒流源电路仿真分析

利用运放设计一个恒流源

HW-BASE的博客 4088

Linux 进程分身术:fork() 函数的深度解析

<摘要> fork() 是 Linux 系统编程中的核心函数,能够复制当前进程创建子进程。本文通过生活比喻和代码示例,深入解析 fork() 的工作原理:从基本进程创建到复杂进程间通信。文章详细介绍了 fork() 的声明、返回值特性(父进程返回子PID,子进程返回0),以及其无参数设计背后的完整复制理念。通过三个典型示例(基础 fork、fork-exec 组合、进程池创建),展示了 fork() 在并发编程中的强大能力。最后还讨论了现代 Linux 采用的写时复制技术,以及常见错误处理方式,

weixin_42108533的博客 891

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c++中的fork函数_Linux下C语言的fork()子进程函数用法及相关问题解析

forkfork()函数是linux下的一个系统调用,它的作用是产生一个子进程,子进程是当前进程的一个副本,它跟父进程有一样的虚存内容,但也有一些不同点。但是,值得注意的是,父进程调用fork()后,fork()返回的是生成的子进程(如果能顺利生成的话)的ID。子进程执行的起点也是代码中fork的位置,不同的是下面这段C语言代码展示了fork()函数的使用方法:// myfork.c#includ...

weixin_34552525的博客 624

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C语言编程创建函数fork() 执行解析

最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解。现总结如下: 1.函数本身 (1)头文件 #include #include (2)函数原型 pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

吖桂的专栏 562

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

fork() 函数解析

转载自http://blog.youkuaiyun.com/jason314/article/details/5640969 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后...

dijingzhou4259的博客 157

fork()函数介绍 原理解析

PCB中的进程地址空间指向的是父进程PCB的进程地址空间结构体地址,创建新的页表,子进程共享父进程页表的一部分页表项。系统调用的作用是在当前进程中创建一个新进程,新进程与当前进程具有相同的内存空间和文件描述符,但拥有独立的进程ID和资源。: 子进程和父进程之间存在一种父子关系,操作系统会维护这种关系,使得父进程可以等待子进程结束,或者子进程可以发送信号给父进程。这样子进程和父进程都会有一个独立的、可读写的页面,可以直接修改它们的内容。如果返回值是子进程的进程ID,表示父进程(一般是所在程序的进程)调用。

weixin_74128452的博客 1281

Linux:fork()函数详解:原理、用法及经典面试题解析

fork()是Linux/Unix系统中用于创建新进程的系统调用。它通过复制当前进程(父进程)来创建一个全新的进程(子进程)。调用一次,返回两次(父进程和子进程各返回一次)子进程是父进程的完整副本通过返回值区分父子进程合理使用wait()避免僵尸进程理解写时复制机制有助于性能优化创建并行处理任务实现网络服务器的并发模型执行外部程序(通常配合exec()系统函数)掌握fork()是Linux系统编程的基础,也是区分初级和中级程序员的重要标志。建议大家多动手实践,加深理解!

2301_78626750的博客 793

多线程 --- fork()、vfork()函数(底层解析)

fork()函数 头文件 #include<unistd.h> #include<sys/types.h> 函数原型 pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1 函数说明 fork一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process

demo_yo的博客 425

linux ctrl c 子进程,Linux下C语言的fork()子进程函数用法及相关问题解析

forkfork()函数是linux下的一个系统调用,它的作用是产生一个子进程,子进程是当前进程的一个副本,它跟父进程有一样的虚存内容,但也有一些不同点。但是,值得注意的是,父进程调用fork()后,fork()返回的是生成的子进程(如果能顺利生成的话)的ID。子进程执行的起点也是代码中fork的位置,不同的是下面这段C语言代码展示了fork()函数的使用方法:// myfork.c#includ...

weixin_28938701的博客 333

【Linux】进程创建——fork()函数深度解析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

weixin_54114700的博客 914

Linux下C编程,子进程创建函数fork() 执行解析

最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解。现总结如下: 1.函数本身   (1)头文件   #include<unistd.h>  #include<sys/types.h>   (2)函数原型   pid_t fork( void);  (pid_t 是一个宏定义,其实质是int 被定义在#include<...

weixin_33958585的博客 139
上一篇: mock浅析
下一篇: 索引节点和inode的指针结构浅析
Csoul89757
博客等级 码龄10年 34粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值