热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linuxfork函数创建进程

@Linux系统进程进程相关解释进程:运行起来的程序在内存中的镜像进程号:系统分配给进程的一个编号,用于标记该进程,便于系统调度管理该进程。进程号唯一,进程号也是有限。进程结束后,

@Linux系统进程

进程相关解释

进程:运行起来的程序在内存中的镜像

进程号:系统分配给进程的一个编号,用于标记该进程, 便于系统调度管理 该进程。进程号唯一,进程号也是有限。进程结束后,会将进程号归还系统。系统可以将归还的进程号分配给新的进程。

进程控制块(pcb):一块内存空间,存放进程的相关信息,便于系统管理。进程号,打开的文件列表,信号列表…

并发:宏观上,多个程序同时运行;微观上,某个时刻,只有一个程序在运行

进程调度算法:先来先执行,短作业优先原则,时间片轮转,优先级调度,多优先级队列时间片轮转

fock()函数创建进程

#include
#include
pid_t fork(void);

fork()通过复制调用进程来创建一个新进程。新进流程被称为子进程。原进程被称为父进程。

子进程和父进程在不同的内存空间中运行。在fork()时,两个内存空间具有相同的内容。 其中一个过程不会影响另一个进程。

成功后,子进程的进程号将在父进程中返回,并且在子进程中返回0。失败时,在父级中返回-1,没有创建子进程。

#include
#include
#include
#include
#include
int main(void)
{
int i = 0;
char caMsg[128] = { '\0'};
pid_t pid = -1;
pid = fork();
if (pid > 0) //parent
{
i = 3;
printf("parent msg addr = 0x%p\n", caMsg);
strcpy(caMsg, "this is parent...");
}
else if (0 == pid) //child
{
i = 6;
printf("child msg addr = 0x%p\n", caMsg);
strcpy(caMsg, "this is child...");
}
else if (-1 == pid)
{
perror("fork");
exit(EXIT_FAILURE);
}
for (; i>0; i--)
{
printf("%s\n", caMsg);
sleep(1);
}
return 0;
}

《Linux fork函数创建进程》
虽然在Linux中运行显示父进程与子进程地址一样,但其并不相同。

猜猜有几个进程

1.打印多少个g?

#include
#include
#include
int main(void)
{
for(int i=0;i<2;i++)
{
fork();
printf("g\n");
}
return 0;
}

2.打印多少个g?

int main(void)
{
//总共有多少个进程
int i = 0;
for (; i<2; i++)
{
fork();
printf("g");
}
return 0;
}

答案1、6个 2、8个


推荐阅读
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 题目描述:计算从起点到终点的最小能量消耗。如果下一个单元格的风向与当前单元格相同,则消耗为0,否则为1。共有8个可能的方向。 ... [详细]
  • 本文详细介绍了Sleep函数的基本概念、使用方法及其背后的实现原理。适合对Sleep函数的使用和实现感兴趣的开发者阅读。通过本文,您将了解如何在不同操作系统中使用Sleep函数,以及其在多线程编程中的重要性。 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • 本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文详细介绍了二叉堆的概念及其在Java中的实现方法。二叉堆是一种特殊的完全二叉树,具有堆性质,常用于实现优先队列。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 深入解析Python进程间通信:Queue与Pipe的应用
    本文详细探讨了Python中进程间通信的两种常用方法——Queue和Pipe,并通过具体示例介绍了它们的基本概念、使用方法及注意事项。 ... [详细]
  • 前言:由于Android系统本身决定了其自身的单线程模型结构。在日常的开发过程中,我们又不能把所有的工作都交给主线程去处理(会造成UI卡顿现象)。因此,适当的创建子线程去处理一些耗 ... [详细]
  • 本文介绍了读写锁(RWMutex)的基本概念、实现原理及其在Go语言中的应用。读写锁允许多个读操作并发执行,但在写操作时确保互斥,从而提高并发性能。 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ... [详细]
author-avatar
victor
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有