操作系统课程设计-Linux 进程控制

目录

前言

1 实验题目

2 实验目的

3 实验内容

3.1 进程的创建

3.1.1 步骤

3.1.2 关键代码

3.2 子进程执行新任务

3.2.1 步骤

3.2.2 关键代码

4 实验结果与分析

4.1 进程的创建

4.2 子进程执行新任务

5 代码

5.1 进程的创建

5.2 子进程执行新任务


前言

         本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭,另外,本次实验所用平台是Ubuntu 22.04 LTS,代码均是在终端进行编译的,不会的可以先了解怎么用终端编程,或者利用其他较为智能的开发环境进行编程

1 实验题目

        实验二 Linux 进程管理

2 实验目的

        通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。​​​

3 实验内容

3.1 进程的创建

3.1.1 步骤

        (1)步骤1:在目录实验2下用touch命令新建一个实验2-1.c文件,利用gedit命令打开编辑,复制清单3-1中的代码到实验2-1.c文件中并保存,利用gcc命令将其编译成可执行文件实验2-1。

        (2)步骤2:在命令行输入./实验2-1运行该程序,观察运行结果。

        (3)步骤3:多次运行程序,观察运行结果。

3.1.2 关键代码

	 if (x==0){sleep(rand() % 2);printf("a\n");}else{sleep(rand() % 3);printf("b\n");}if(x==0)printf("cc\n");else printf("fc\n");

3.2 子进程执行新任务

3.2.1 步骤

        (1)步骤1:在目录实验2下用touch命令新建一个实验2-2.c文件,利用gedit命令打开编辑,复制清单3-2中的代码到实验2-2.c文件中并保存,利用gcc命令将其编译成可执行文件实验2-2。

        (2)步骤2:在命令行输入./实验2-2运行该程序,观察运行结果。

3.2.2 关键代码

    pid_t pid;/*fork another process*/pid = fork();if(pid<0){fprintf(stderr,"Fork Failed");exit(-1);}else if(pid==0){execlp("/bin/ls","ls",NULL);}else{/*parent process*//*parent wait for the child to complete*/wait(NULL);printf("Child Complete\n");exit(0);}

4 实验结果与分析

4.1 进程的创建

执行步骤2和3后,可以看到每次的结果不一定相同,可能是父进程先执行完毕,也可能是子进程先执行完毕,这说明进程的调度是不可预测的,即程序的执行不可在现,结果如下图所示:

图1.1 实验2-1步骤2和3

4.2 子进程执行新任务

执行步骤2后,会看到在终端上先输出了目录下的文件情况,再输出”Child Compelete”,说明父进程执行wait之后,会等待子进程执行完才会继续执行,结果如下图所示:

图1.2 实验2-2步骤2

5 代码

5.1 进程的创建

#include<stdio.h>
#include<stdlib.h>
int main(void){int x;srand((unsigned)time(NULL)); while((x=fork())==-1);if(x==0){sleep(rand()%2);printf("a\n");	}else{sleep(rand()%3);printf("b\n");	}if(x==0)printf("cc\n");else printf("fc\n");
}

5.2 子进程执行新任务

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
int main(void){pid_t pid;/*fork another process*/pid = fork();if(pid<0){fprintf(stderr,"Fork Failed");exit(-1);}else if(pid==0){execlp("/bin/ls","ls",NULL);}else{/*parent process*//*parent wait for the child to complete*/wait(NULL);printf("Child Complete\n");exit(0);}
}

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

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

相关文章

使用composer构建软件包时文件(夹)权限设置

在构建软件包的时候你可能会需要对包源内文件或文件夹的权限做出相应的调整&#xff0c;以确保软件包在部署到客户端后可以正常运行。在此之前我们先来了解一下Apple文件系统内文件或文件夹的权限设定。 常见的文件或文件夹会有Owner, Group, Everyone这三种类型的所有权&#…

关于C#中Monitor的wait/pulse的理解

wait&#xff1a;表示释放对象上的锁并阻止当前线程&#xff0c;直到它重新获取该锁。 pulse&#xff1a;表示通知等待队列中的线程锁定对象状态的更改。 当线程调用 Wait 时&#xff0c;它会释放对象上的锁并进入对象的等待队列。 对象的就绪队列中的下一个线程 (如果有一个…

导入失败,报错:“too many filtered rows xxx, “ErrorURL“:“

一、问题&#xff1a; 注&#xff1a;前面能正常写入&#xff0c;突然就报错&#xff0c;导入失败&#xff0c;报错&#xff1a;“too many filtered rows xxx, "ErrorURL":" {"TxnId":769494,"Label":"datax_doris_writer_bf176078-…

【嘉立创EDA-PCB设计指南】3.网络表概念解读+板框绘制

前言&#xff1a;本文对网络表概念解读板框绘制&#xff08;确定PCB板子轮廓&#xff09; 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2&#xff0c;将设计的原理图转为了PCB&#xff0c;在PCB界面下出现了所有的封装&#xff0c;以及所有的飞线属性&…

AI大模型预先学习笔记二:prompt提问大模型、langchain使用大模型框架、fine tune微调大模型

文章目录 一、Prompt Engineering&#xff08;怎么去提问大模型&#xff09;1&#xff09;环境准备2&#xff09;交互代码的参数备注3&#xff09;交互代码 二、LangChain&#xff08;一个框架去使用大模型&#xff09;1&#xff09;LangChain核心介绍&#xff1a;I/O模块、数据…

231012期高薪就业榜来啦!就业班平均就业薪资8065元!就业路上,优橙与你并肩同行!!

承诺一定会抵达&#xff0c;无远弗届。231012期优橙就业薪资榜来啦&#xff01;&#xff01; 231012期&#xff0c;平均就业薪资8065元&#xff0c;彰显优橙的就业底气&#xff01;&#xff01; 231012期&#xff0c;最高就业薪资10000元&#xff0c;明晰学员的就业实力&…

《C++入门篇》——弥补C不足

文章目录 前言一.命名空间二.缺省参数三.函数重载四.引用4.1引用做参数4.2引用做返回值 五.内联函数六.小语法6.1auto6.2范围for6.3空指针 前言 C是业内一门久负盛名的计算机语言&#xff0c;从C语言发展起来的它&#xff0c;不仅支持C语言的语法&#xff0c;还新添加了面向对…

LLM漫谈(三)| 使用Chainlit和LangChain构建文档问答的LLM应用程序

一、Chainlit介绍 Chainlit是一个开源Python包&#xff0c;旨在彻底改变构建和共享语言模型&#xff08;LM&#xff09;应用程序的方式。Chainlit可以创建用户界面&#xff08;UI&#xff09;&#xff0c;类似于由OpenAI开发的ChatGPT用户界面&#xff0c;Chainlit可以开发类似…

MongoDB认证考试小题库

Free MongoDB C100DBA Exam Actual Questions 关于MongoDB C100 DBA 考试真题知识点零散整理 分片架构 应用程序 --> mongos --> 多个mongod对于应用来说&#xff0c;连接分片集群跟连接一台单机mongod服务器一样分片好处&#xff0c; 增加可用RAM、增加可用磁盘空间、…

Js-web APIs(一)

目录 Web API 基本认知 • 作用和分类 • 什么是DOM • DOM树 • DOM对象(重要) 获取DOM对象 • 根据CSS选择器来获取DOM元素 (重点) 1.选择匹配的第一个元素 2.选择匹配的多个元素 • 其他获取DOM元素方法&#xff08;了解&#xff09; 操作元素内容 • 对象.innerT…

二十几种未授权访问漏洞合集

未授权访问漏洞是一个在企业内部非常常见的问题&#xff0c;这种问题通常都是由于安全配置不当、认证页面存在缺陷&#xff0c;或者压根就没有认证导致的。当某企业对外的服务端口、功能无限制开放&#xff0c;并且对用户的访问没有做任何限制的时候&#xff0c;可能会泄露出某…

Spring Boot - Application Events 同步 VS 异步 发布订阅事件实战

文章目录 PreCode基础工程启动类切入口事件 发布事件同步 Listener异步Listener增加EnableAsync增加 Async 测试 Pre Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEv…