fork创建子进程

Linux创建子进程- fork()和vfork() fork fork()是Linux中在一个进程中创建一个子进程的系统调用。 函数原型 #include <unistd.h> pid_t fork(void); 进程创建的一般过程 1.给新进程分配一个标识符,在内核中分配一个PCB 2.复制父进程的环境(不复制地址空间) 3.分配资源(程序,数据,堆栈等) 4.复制父进程的地址空间的内容 5.将进程置成... 阅读详情

这几天在看看笔试题,准备找移动开发的,找到了百度 济南移动终端开发的笔试题,一看吓一跳,很多都忘了,就目前的情况,基本都不会,赶紧拿来以前的笔记,复习一下。

 以下是百度济南的笔试题:   

1  .利用互斥量和条件变量设计一个消息队列,具有以下功能: 

    (1)  创建消息队列(消息中所含的元素) 

     (2)消息队列中插入消息 

     (3)取出一个消息(阻塞方式) 

    (4)取出第一消息(非阻塞方式) 

 2 用非递归方法完成二叉树的周游 

 
 3 讲下cnwap 和cnnet的区别 
 
 4 设计一个内存管理策略,要求可以保证多线程时的安全,防止内存越界等,效率不低于
malloc/free 函数 

会的网友可以给我发消息啊。
   

今天先从看看进程控制。

进程是60年代初首先由麻省理工学院的MULTICS系统和IBM公司的CTSS/360系统引入的。

  进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

在linux里,创建进程的函数有fork( )和vfork( )

 

fork

Vfork

头文件

#include<unistd>

#include<unistd.h>

函数原型

Int fork(void)

Int vfork(void)

返回值

子进程返回0,父进程返回子进程ID,出错返回-1

区别

1.       fork()创建的子进程拷贝父进程的数据段,堆栈段。Vfork()创建的子进程与父进程共享数据段

2.       fork()的父子进程的顺序不定,但是vfork()是子进程先运行

3.       vfork()创建的子进程在调用exec()或exit()这两个函数前,如果子进程依赖于父进程的进一步动作,则会导致死锁

在来段例子的代码

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <math.h>


/*
 * 程序入口
 * */
int main(void)
{
	pid_t child;
	/* 创建子进程 */
	if((child=fork())==-1)
	{
		printf("Fork Error : %s\n", strerror(errno));
		exit(1);
	}
	else 
	{
		if(child==0) // 子进程
		{
			printf("I am the child: %d\n", getpid());
			exit(0);
		}
		else          //父进程
		{
			printf("I am the father:%d\n",getpid());
			return 0;
		}
	}
}	


运行结果是,两句话都打印出来了,说明创建了两个进程,因为if else是互斥的,如果只有一个进程,那就只会打印一个。

再看看,vfork()的例子代码:

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <math.h>

/*
 * 程序入口
 * */
int main(void)
{
	pid_t child;

	/* 创建子进程 */
	if((child=vfork())==-1)
	{
		printf("Fork Error : %s\n", strerror(errno));
		exit(1);
	}
	else 
	{
		if(child==0) // 子进程
		{
			sleep(1); //子进程睡眠一秒
			printf("I am the child: %d\n", getpid());
			exit(0);
		}
		else        //父进程
		{
			printf("I am the father:%d\n",getpid());
			exit(0);
		}
	}
}

结果为,先打印 I am the child ,然后是 I am the father,这就体现了vfork()的区别了



c语言版数据结构课程设计 学生成绩管理系统 此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加学生信息等等功能。一共15项。   代码如下: // shujujiegou.cpp : 定义控制台应用程序的入口点。///**本程序采用数组链表形式,原因:数组查询速度快,数组也能实现动态存储 阅读详情

相关推荐

FreeCAD地下管道自动化建模实战:Python脚本从入门到导出OBJ

本文详细介绍了如何利用FreeCAD的Python API实现地下管道的自动化建模,从数据处理到模型导出OBJ格式的全流程。通过实战案例和代码示例,展示了圆形和矩形截面管道的创建方法,以及法兰连接等特殊处理技巧,大幅提升工程设计效率。

ff678的博客 248

forking基础应用

1.1 问题 编写一个myfork.py脚本,实现以下功能: 在父进程中打印“In parent”然后睡眠10秒 在子进程中编写循环,循环5次,输出当前系统时间,每次循环结束后睡眠1秒 父子进程结束后,分别打印“parent exit”和“child exit” 1.2 方案 子进程运行时是从 pid = os.fork() 下面语句执行,实际上,该语句是两条语句, os.frok() 是创建子进程语句,而 pid = 是赋值语句,所以在创建完子进程后,下一句为运行赋值语句。 进程调用fork函数时,操作系

彭淦淦的博客 647

高通8155车机系统里,安卓和QNX是怎么‘打电话’的?聊聊HAB通信框架那些事

本文深入解析了高通8155车机系统中HAB通信框架如何实现安卓与QNX的高效协同。作为异构系统的通信桥梁,HAB通过共享内存和中断信号机制,在多媒体数据传输中展现出零拷贝、硬件加速等优势,成为智能座舱实现实时性与生态丰富性平衡的关键技术。

weixin_42715608的博客 382

linux 创建子进程,Linux中使用fork创建子进程详解及示例程序

1. 进程1.1. 什么是进程当可执行文件开始运行之后,就变为了系统中的一个进程,一个程序(可执行文件)运行起来之后可以创建多个进程执行,称之为多进程程序。每个进程包含有进程运行环境、内存地址空间、进程ID、和至少一个被称为线程的执行控制流等资源。系统中所有的这些进程实体共享计算机系统的 CPU、外设、内存等资源。1.2. 进程的状态系统中的一个CPU在某一个时刻只能执行一个进程,系统中存在的这些...

weixin_39663933的博客 3072

算法交易VWAP&TWAP

VWAP的一些算法模型细节参考博客地址http://blog.sina.com.cn/s/blog_ad47bc5b01014elx.html 日内交易量预测模型http://blog.sina.com.cn/s/blog_976461170102v43p.html 算法交易其实主要是用在基金公司、券商量化比较多。例如我已经选好股,要大量买入,但是单凭交易员的操作海量单而且要完

shulixu的博客 1万+

香橙派5玩转SATA SSD:一个被忽略的overlays配置项,让你的Ubuntu系统飞起来

本文详细介绍了如何在香橙派5上通过配置`overlays=ssd-sata`启用SATA SSD作为系统启动盘,大幅提升Ubuntu系统的性能。文章深入解析了设备树覆盖的工作原理,提供了完整的配置流程和性能优化建议,帮助开发者充分发挥香橙派5的硬件潜力。

weixin_30787531的博客 220

Linux编程之fork(创建一个进程)

一、API 头文件:unistd.h pid_t fork(); 作用: 如果fork()调用成功,就会使内核建立一个新的进程,所建的新进程是调用fork()的进程的副本。 系统调用fork()没有参数,它返回一个pid_t类型的值pid。pid被用来区分父进程和子进程。在父进程中,pid被置为一个非0的正整数;在子进程中,pid被置为0。根据fork()在父进程和子进程中的返回值不同,程序员可以据此为两个进程指定不同的工作。 二、例子 #include <stdio.h> #include

xunye的博客 3943

谷歌账号国家或地区设置修改全攻略:条件、流程与避坑指南

谷歌账号的国家或地区设置与付款资料、账号历史行为及登录环境强绑定,修改时需满足特定条件。其原理在于地区作为索引键,关联内容库、货币结算和风控策略。正确切换可解决内容推荐错乱、付款失败等问题,适用于搬家、订阅区域限定服务等场景。操作前需在目标地区创建付款资料、清空余额并取消订阅,且一年仅能修改一次。本文详解从准备到验证的完整流程,并揭示官方文档未提及的实操陷阱,助你安全完成地区切换。

weixin_42521558的博客 2326

fork函数实现循环打印父子进程

本次文章讲述如何利用fork函数实现对父子进程的循环打印。这里包含#include 和#include 两个头文件,函数原型为pid_t fork(void);pid_t 很明显为类型重命名,这里需要注意的是fork函数的返回值,当它等于0时处于子进程中,当它大于0时处于父进程中,小于0时出错。所以我们可以通过getpid()函数得到子进程号,getppid()函数得到父进程号(注意他们的头文件)来实现父子进程号的打印...

qq_48866804的博客 1694

斗鱼直播间弹幕爬虫实战:WebSocket连接与实时数据采集

在数据驱动的时代,直播平台的弹幕数据蕴含着巨大的价值——用户行为分析、舆情监控、弹幕情感分析、直播热度评估等应用场景层出不穷。斗鱼作为国内领先的直播平台,其弹幕系统基于WebSocket协议实现实时双向通信。本文将带您从零开始,使用Python构建一个完整的斗鱼直播间弹幕爬虫系统。

2201_76125261的博客 137

华为OD机试真题 新系统 2026-09-06 Python&JS【仓储货物有序出库】

某仓储中心有一个货物堆放区,货物编号按乱序堆叠存放,只能从顶部取货,管理员需要将货物按编号从小到大取出。

MISAYAONE的博客 116

Linux下利用fork创建子进程产生的疑问(个人猜想)

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

盖世英雄来了 1866

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

fork创建子进程详解

本文详解了fork,解决了关于fork的几个难点

adcxhw的博客 2713

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

Linux--fork创建子进程详解

详细描述了fork创建创建子进程的原理,以及为什么fork的返回值有两个,父子进程谁先进行及理解一个变量为什么会有两个值

qq_63440853的博客 3161

创建进程fork——父进程与子进程

fork创建进程 fork系统调用是用于创建进程的,并且fork创建的进程初始化状态与父进程一样。(进程空间中的变量)系统会为fork的进程分配新的资源 fork系统调用无参数。 fork返回两次,(在父进程中)第一次返回子进程id,(在子进程中)第二次返回0 .换句话说就是返回子进程id的是父进程,返回0的是子进程。 测试代码 ...

jane_6091的博客 7618

进程(二)—— fork()创建子进程

上一次说明了进程是怎么被创建的,进程的程序又是如何运行的,本文主要介绍fork()函数创建进程的过程中发生了什么,结合代码进行过程分析

challenglistic的博客 1万+

fork()函数创建子进程

APUE–fork()函数介绍 文章目录APUE--fork()函数介绍一、fork()系统调用介绍1.fork()创建子进程特点2. 子进程的特点二、代码示例1.fork()创建子线程2.子进程对内存修改 一、fork()系统调用介绍 1.fork()创建子进程特点 fork()用于创建子进程,一次调用会有两个返回(return),一次返回给父进程子进程的PID(Process ID),一次返回给子进程,其返回值为0. 返回值=0,子进程在运行 返回值>0,父进程在运行 返回值<0,fo

qq_47834139的博客 7224

【Linux】系统调用fork创建子进程

介绍了系统调用函数fork相关内容

dab112的博客 740

Linux fork创建子进程

1.pid_t fork(void);   功能:创建父子进程   参数:无   返回值:成功:在父进程中:返回值为子进程的PID     在子进程中:返回值为0     失败:-1 注意:   1)fork函数是用来创建进程的,fork之后产生了两个进程,每个进程都会有返回值,   所以父进程中返回的是子进程的进程号(>0);在子进程中返回0   2)子进程...

weixin_33767813的博客 1494

图解fork( )创建子进程的过程

fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事

qq_55914897的博客 3674

fork函数:创建子进程

fork函数创建子程序原理: 关于fork函数函数几点说明: 1.fork函数返回的两个值不是在一个进程中返回的,而是父子进程各返回一个值,其中父进程返回子进程的PID,子进程返回0; 2.父子进程的执行顺序:谁先获得CPU谁先执行; 3.父子进程执行的代码逻辑:父进程执行PID>0的逻辑,子进程执行PID等于0的逻辑; 4.调用fork之后父子进程会一起并行执行,由原来一个进程变成两个进程。 创建子进程代码如下: //fork函数测试 #include<iostream&.

m0_60663280的博客 1688

P10 Linux进程编程 fork创建子进程

🎬 个人主页:@ChenPi🐻推荐专栏1: 《》✨✨✨🔥 推荐专栏2: 《》✨✨✨🛸推荐专栏3: ​​​​​​《》 ✨✨✨🌺本篇简介 : 上一章我们讲了Linux进程的概念以及获取进程ID号和获取父进程的ID这一章我们引进新的概念,父子进程Linux 是一个多用户多任务的操作系统,每个用户可以同时运行多个程序进程是程序运行的主体,包括进程的创建,调度和消亡的整个过程当用户执行一个指令或者启动一个程序时,就创建了一个进程一个运行的程序也可能有多个进程。每个进程将被分配各种资源。

weixin_73901182的博客 1222

【Linux我做主】探秘PID与fork创建子进程

揭开fork创建子进程的神秘面纱

有梦想的电信狗 1308

linux系统如何使用fork函数创建子进程

大家都知道linux是多进程的系统。可是,在linux中,进程是如何创建并运行的呢?在linux系统中创建进程有两种方式:一是由操作系统创建,二是由父进程创建进程(通常为子进程)。系统调用函数fork()是创建一个新进程的唯一方式,fork()函数是Linux系统中一个比较特殊的函数,其一次调用会有两个返回值。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程。

不积跬步,无以至千里! 2万+

创建子进程fork

创建子进程

qq_42632460的博客 322
上一篇: 项目总结
下一篇: vc中Error spawning cl.exe错误的解决方法
edcdc009
博客等级 码龄15年 12粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值