进程的创建和管理

一. 实验内容

1.  编写一个程序,程序中创建一个子进程。然后父、子进程各自独立运行,父进程不断地在标准输出设备(即显示器)上输出字母p和回车(输出30次或以上),子进程不断地在标准输出设备(即显示器)上输出字母c和回车(输出30次或以上)。

提示:相关的系统调用或函数:fork( )

多次运行程序,观察程序输出的结果,并做出合理的解释。

2.  (附加题,选做)编写一个程序,程序中创建两个子进程,然后三个进程各自独立运行。

父进程每隔1秒钟输出一个字母P和回车,共输出10次;

子进程1每隔2秒钟输出一个字母C和回车,共输出10次;

子进程2每隔3秒钟输出一个字母S和回车,共输出10次;

父进程必须等待两个子进程都结束后输出一句“Finish!”,然后才结束退出。

提示:可能使用到的系统调用或函数: sleep( )  wait( )

3.  你如果有其他方法可以影响(或改变)父、子进程的执行顺序?写出你的方法,论证其正确性,并加以实现。实现结果是否与预期的一致?

1.

#include<unistd.h>

#include<stdio.h>

int main()

{

int i;

pid_t fpid;

int count = 0;

fpid = fork();

if(fpid == 0)

{

for(i=0;i<30;i++)

{

usleep(10);

printf("c \n");

}

}

else

{

for(i=0;i<30;i++)

{

usleep(15);

printf("p \n");

}

}

return 0; 

}

2.

#include<unistd.h>

#include<stdio.h>

#include <sys/wait.h>

int main()

{

int i;

pid_t fpid;

int count = 0;

fpid = fork();

if(fpid == 0)

{

for(i=0;i<10;i++)

{

sleep(2);

printf("c \n");

}

}

else

{

fpid=fork();

if(fpid==0)

{

for(i=0;i<10;i++)

{

printf("s\n");

sleep(3);

}

}

else{

for(i=0;i<10;i++)

{usleep(1);

printf("p \n");

}

wait(NULL);

wait(NULL);

printf("finish!");

}

}

return 0; 

}

3.可以采用vfork函数确保子进程优先完成或者PV操作实现先后顺序的改变。

1.

2.

3.

1.

借助fork函数和Linux系统完成进程的创建并观察到两个进程相互独立输出拥有自己的空间因此明白了操作系统的进程的含义。

2.

借助wait()函数了解了操作系统的进程之间的相互阻塞去进行先后顺序的改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[面试题]Java【并发】

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL 因为 Java 并发涉及到的内容会非常多&#xff0c;本面试题可能很难覆盖到所有的知识点&#xff0c;所以推荐 《Java并发编程的艺术》 。 Java 线程 线程 通知 等待 线…

植物ATAC-seq文献集锦(三)——果实发育篇

ATAC-seq在植物研究领域的应用我们已经介绍2期了&#xff0c;本期我们聚焦ATAC-seq技术在果实发育方向的应用案例。 植物ATAC-seq文献集锦&#xff08;一&#xff09;——基因组篇 植物ATAC-seq文献集锦&#xff08;二&#xff09;——生长发育篇 文献一&#xff1a;Ident…

数据结构篇:链表和树结构的操作方法

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/e4f2ff1e1895​​ 链表和树是数据结构中两种非常重要和常见的结构。链表是一种线性数据结构&#xff0c;适用于需要频繁插入和删除操作的场景&am…

Linux 内核 (十二)进程间通讯 之 消息队列

前言 这个系列的上一篇介绍了进程间通讯关于管道相关的内容及代码实例,本章要介绍关于消息队列相关的内容. 消息队列交互图示 函数原型 #include <sys/msg.h> #include <sys/ipc.h> //创建 or 打开队列 成功返回队列ID,失败返回-1 int msgget(key_t key,int fla…

商城小程序系统:一站式搭建,轻松上线

前言 近年来&#xff0c;商城小程序系统以其便捷、高效的特点&#xff0c;正逐渐成为商品买卖的新宠。这类小程序&#xff0c;类似于我们熟知的京东、淘宝等电商巨头&#xff0c;为商家提供了一个全新的销售渠道&#xff0c;让商品买卖更加智能化、便捷化。 一、商城小程序有什…

【Linux】从零开始配置新的服务器的机器学习环境

终端远程登录 ssh -p [端口号] [服务器用户名][服务器IP]或者 ssh [用户名][主机地址]第二种的前提是在.ssh\config中配置了host 安装文本编辑器vim 主要用于后续的文本编辑&#xff0c;个人比较习惯用vim&#xff0c;根据自己喜好选择 更新apt sudo apt update安装文本编辑…

苹果安卓网页的H5封装成App的应用和原生开发的应用有什么不一样?

H5封装类成App的应用和原生应用有什么不一样&#xff1f;——一对比谈优缺点 1. 开发速度和复用性 H5封装的App优势&#xff1a;一次编写&#xff0c;多平台运行。你只需要使用一种语言编写代码&#xff0c;就可以发布到不同的平台&#xff0c;降低开发成本。 原生应用优势&…

【Vue3】使用mitt实现任意组件通信

历史小剧场 最幸福的&#xff0c;就是中间那拨人&#xff0c;主要工作&#xff0c;叫做欺上瞒下&#xff0c;具体特点是&#xff0c;除了好事&#xff0c;什么都办&#xff1b;除了脸&#xff0c;什么都要。----《明朝那些事儿》 安装 npm install mitt常用API mitt().on() 绑…

MyBatis使用 PageHelper 分页查询插件的详细配置

1. MyBatis使用 PageHelper 分页查询插件的详细配置 文章目录 1. MyBatis使用 PageHelper 分页查询插件的详细配置2. 准备工作3. 使用传统的 limit 关键字进行分页4. PageHelper 插件&#xff08;配置步骤&#xff09;4.1 第一步&#xff1a;引入依赖4.2 第二步&#xff1a;在m…

在VMware中安装CentOS7(超详细的图文教程)

1、CentOS7的下载 官网下载地址&#xff1a;Download。 进入CentOS下载官网&#xff0c;找到64位的CentOS7版本。 点进来后&#xff0c;发现它给我们列出了所在区域可用镜像源&#xff08;可以说是非常的良心的&#xff09;&#xff0c;我们随便选择一个&#xff0c;这里以阿…

面向对象编程垃圾回收机制

系列文章目录 文章目录 系列文章目录前言一、垃圾回收机制&#xff08;Garbage Collection&#xff09; 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用…

Python保姆级教程 数据类型—新手小白入门必看

python学习资料&#xff0c;下方已打包好 一、基本数据类型与变量&#xff08;上&#xff09; 2.1 注释 优点&#xff1a; 代码说明 没注释的代码 有注释的代码 不让解释器执行注释的那句话 2.2 单行注释 单行注释快捷键&#xff1a;ctrl &#xff1f; 2.3多行注释 …

leetcode刷题记录42-1584. 连接所有点的最小费用

问题描述 给你一个points 数组&#xff0c;表示 2D 平面上的一些点&#xff0c;其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其中 |val| 表示 val 的绝对值。 请你返回将所有点连…

U-Mail国产信创邮件系统,让企业通信更加安全可控

信息技术应用创新产业&#xff0c;即信创产业&#xff0c;是信息化建设的核心&#xff0c;它涵盖了从硬件到软件的一系列关键技术。信创产业的目标是通过自主研发&#xff0c;减少对外部技术的依赖&#xff0c;增强信息安全&#xff0c;并提升国内产业的全球竞争力。该产业主要…

如何用Vue3和p5.js打造一个令人惊叹的3D球体在线展示

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 p5.js 创建交互式 3D 图形 应用场景介绍 p5.js 是一个用于创建交互式图形和动画的 JavaScript 库。它被广泛用于教育、艺术和设计领域&#xff0c;让开发者可以轻松创建具有吸引力的可视化效果。 代码基…

什么是堡垒机?和跳板机是一个概念吗?

堡垒机&#xff0c;又称运维审计系统、跳板机&#xff0c;是一种位于内部网络与外部网络之间的安全防护设备&#xff0c;它充当了一个“中间人”的角色&#xff0c;所有对内部网络资源的远程访问都必须通过堡垒机进行。这一设计的核心目的&#xff0c;在于严格控制和记录所有进…

打破限制:C#13带来的革命性扩展特性

C#语言一直以其强大的功能和灵活性著称&#xff0c;其中扩展方法为开发者提供了一种便捷的方式来扩展现有类型。然而&#xff0c;扩展方法也有一些局限性&#xff0c;比如只能使用静态类、只能扩展方法。令人振奋的是&#xff0c;即将到来的C# 13可能会带来一次革命性的更新&am…

apache配置文件httpd.conf详解

Apache HTTP 服务器的配置文件通常称为 httpd.conf。该文件包含了各种指令&#xff0c;用于定义 Apache 的行为和功能。下面是 httpd.conf 文件的典型结构及其各部分的功能解析&#xff1a; 1. 全局环境配置 全局环境配置部分主要设置一些全局性的参数&#xff0c;这些参数对…

任务3.8.1 利用RDD实现词频统计

实战&#xff1a;利用RDD实现词频统计 目标 使用Apache Spark的RDD&#xff08;弹性分布式数据集&#xff09;模块实现一个词频统计程序。 环境准备 选择实现方式 确定使用Spark RDD进行词频统计。 Spark版本与Scala版本匹配 选择Spark 3.1.3与Scala 2.12.15以匹配现有Spar…

kafka原理简介

Kafka是由LinkedIn开发的一个分布式发布/订阅的消息系统和一个强大的队列&#xff0c;使用Scala编写&#xff0c;它以可扩展和高吞吐率而被广泛使用。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上&#xff0c;并在群集内以master-flower方式实现数据同步&#xff0c;…