热门标签 | 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个


推荐阅读
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 文件描述符、文件句柄与打开文件之间的关联解析
    本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • C++: 实现基于类的四面体体积计算
    本文介绍如何使用C++编程语言,通过定义类和方法来计算由四个三维坐标点构成的四面体体积。文中详细解释了四面体体积的数学公式,并提供了两种不同的实现方式。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
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社区 版权所有