一、【实验目的】
1.理解进程的概念,明确进程和程序的区别
2.理解并发执行的实质。
3.掌握进程的创建、睡眠、撤销等进程控制方法。
二、【实验内容】
用C语言编写程序,模拟实现创建新的进程:查看运行进程;换出某个进程:杀死运行进程等功能。
三、【实验步骤】
数据结构:
struct jinChengType
{
int pid;
int youXian;
int daXiao;
int zhuangTai;
char info[10];
};

struct jinChengType neiCun[20];
int shuMu = 0;
int zuse = 0;
int pid = 0;
int flag = 0;

实验代码:

#include <stdio.h>
#include <stdlib.h>struct jinChengType
{int pid;int youXian;int daXiao;int zhuangTai;//标识进程状态,0-不在内存,1-在内存,2-阻塞char info[10];
};struct jinChengType neiCun[20];
int shuMu = 0;
int zuse = 0;
int pid = 0;
int flag = 0;void create()
{if(shuMu >= 20){printf("\n内存已满,请先唤醒或杀死进程\n");}else{int i;for(i = 0; i < 20; i++){//定位,找到可以还未创建的进程if(neiCun[i].zhuangTai == 0)break;}printf("\n请输入新进程pid\n");scanf("%d", &(neiCun[i].pid));for(int j = 0; j < i; j++){if(neiCun[i].pid == neiCun[j].pid){printf("\n该进程已存在\n");return;}}printf("\n请输入新进程优先级\n");scanf("%d", &(neiCun[i].youXian));printf("\n请输入新进程大小\n");scanf("%d", &(neiCun[i].daXiao));printf("\n请输入新进程内容\n");scanf("%s", &(neiCun[i].info));//创建进程,使标记位为1neiCun[i].zhuangTai = 1;shuMu++;}
}void run()
{for(int i = 0; i < 20; i++){if(neiCun[i].zhuangTai == 1){//输出运行进程的各个属性值printf("\npid=%d\n",neiCun[i].pid);printf("youXian=%d\n",neiCun[i].youXian);printf("daXiao=%d\n",neiCun[i].daXiao);printf("zhuangTai=%d\n",neiCun[i].zhuangTai);printf("info=%s\n",neiCun[i].info);flag = 1;}}if(!flag){printf("\n当前没有运行进程\n");}
}void Zuse()
{if(!shuMu){printf("当前没有运行进程\n");return;}printf("\n输入阻塞进程的pid值\n");scanf("%d", &pid);for(int i = 0; i < 20; i++){//定位,找到所要阻塞的进程,根据其状态做相应处理if(pid == neiCun[i].pid){if(neiCun[i].zhuangTai == 1){neiCun[i].zhuangTai = 2;zuse++;printf("\n已经成功阻塞进程\n");} else if(neiCun[i].zhuangTai == 0){printf("\n要阻塞的进程不存在\n");}else{printf("\n要阻塞的进程已被挂起\n");}flag = 1;break;} }//找不到,则说明进程不存在if(flag == 0){printf("\n要阻塞的进程不存在\n");}
} void kill()
{if(!shuMu){printf("当前没有运行进程\n");return;}printf("\n输入杀死进程的pid值\n");scanf("%d", &pid);for(int i = 0; i < 20; i++){//定位,找到所要杀死的进程,根据其状态做相应处理if(pid == neiCun[i].pid){if(neiCun[i].zhuangTai == 1){neiCun[i].zhuangTai = 0;shuMu--;printf("\n已成功杀死进程\n");}else if(neiCun[i].zhuangTai == 0){printf("\n:要杀死的进程不存在\n");} else{printf("\n要杀死的进程已被阻塞\n");}flag = 1;break; }}//找不到,则说明进程不存在if(!flag){printf("\n要杀死的进程不存在\n");}
}void huanxing()
{if(!shuMu){printf("\n当前没有运行进程\n");return;}if(!zuse){printf("\n当前没有阻塞进程\n");return;}printf("\n输入pid:\n");scanf("%d", &pid);for(int i = 0; i < 20; i++){//定位,找到所要杀死的进程,根据其状态做相应处理if(pid == neiCun[i].pid){flag = false;if(neiCun[i].zhuangTai == 2){neiCun[i].zhuangTai = 1;zuse--;printf("\n已经成功唤醒进程\n");}else if(neiCun[i].zhuangTai == 0){printf("\n要唤醒的进程不存在\n");}else {printf("\n要唤醒的进程已被阻塞\n");}break;}}//找不到,则说明进程不存在if(flag){printf("\n要唤醒的进程不存在\n");}
}int main()
{int n = 1;int num;//一开始所有进程都不在内存中for(int i = 0; i < 20; i++){neiCun[i].zhuangTai = 0;while(n){printf("\n***********************************************************");printf("\n*进程演示系统*");printf("\n***********************************************************");printf("\n*1.创建新的进程   2.查看运行进程*");printf("\n*3.阻塞某个进程   4.杀死运行进程*");printf("\n*5.唤醒某个进程   6.退出系统*");printf("\n***********************************************************");printf("\n请选择(1~6)\n");scanf("%d", &num);switch(num){case 1:{create();break;}case 2:{run();break;}case 3:{Zuse();break;}case 4:{kill();break;}case 5:{huanxing();break;}case 6:{exit(0);}default:{n=0;}}flag = 0;//恢复标记}}
}

实验结果自行调试~

操作系统实验(一):c实现创建、查看、杀死进程等功能的实现相关推荐

  1. 操作系统实验1—实现单处理机下的进程调度程序

    操作系统实验1-实现单处理机下的进程调度程序 文章目录 操作系统实验1-实现单处理机下的进程调度程序 实验描述 设计思路 上机代码 测试结果 心得体会 实验描述 实验内容: 编写一个单处理机下的进程调 ...

  2. 操作系统——实验壹——熟悉Linux基础命令及进程管理

    一. 实验目的 加深对进程概念的理解,明确进程和程序的区别. 进一步认识并发执行的实质. 分析进程争用资源的现象,学习解决进程互斥的方法. 二. 实验内容 运行程序,查看自己运行的结果,并进行分析. ...

  3. linux查看杀死进程

    linux 中使用top 或 ps 查看进程使用kill杀死进程 1.使用top查看进程: $top 进行执行如上命令即可查看top!但是难点在如何以进程的cpu占用量进行排序呢? cpu占用量排序执 ...

  4. 11月26日:操作系统实验杂记 shmget(创建共享存储区) shmat(连接共享存储区) shmdt(断连共享存储区) shmctl(共享存储区控制)

    文章目录 函数语法介绍 1.创建共享存储区shmget 2.连接共享存储区shmat 3.断连共享存储区shmdt 4.控制共享存储区shmctl 示例程序代码 进程1代码 进程2代码 函数语法介绍 ...

  5. win10下查看杀死进程

    https://blog.csdn.net/qq_36819098/article/details/80262482

  6. 操作系统实验二 进程管理

    进程管理 一.实验目的 1. 理解进程的概念,明确进程和程序的区别. 2. 理解并发执行的实质. 3. 掌握进程的创建.睡眠.撤销等进程控制方法. 二.实验内容与基本要求 用C语言编写程序,模拟实现创 ...

  7. 实验四linux操作系统实验报告(1),操作系统实验报告

    一. 实验目的及实验环境 (一) 实验环境 Linux 操作系统 (二)实验目的 实验1 掌握Linux基本命令 和开发环境 掌握常用的Linux shell命令: 掌握编辑环境VIM: 掌握编译环境 ...

  8. 操作系统实验报告5:进程的创建和终止

    操作系统实验报告5 实验内容 实验内容:进程的创建和终止. 编译运行课件 Lecture 06 例程代码:Algorithm 6-1 ~ 6-6. 实验环境 架构:Intel x86_64 (虚拟机) ...

  9. Linux进程的创建和父子进程同步,操作系统实验报告_Linux进程创建与通信.doc

    操作系统实验报告_Linux进程创建与通信 2011-2012学年第一学期 专 业: 班 级: 学 号: 姓 名:提交日期:2011年11月实验二 Linux进程创建与进程通信 [实验目的 1. 熟悉 ...

最新文章

  1. 【初窥javascript奥秘之事件机制】论“点透”与“鬼点击”
  2. 转:QQ圈子:社交神器还是隐私魔鬼?
  3. DOM渲染的详细过程 1
  4. Unicode/not set/multi-byte/部分常用函数
  5. Spring中Bean的后置处理器
  6. AngularJS从入门到实践(一)
  7. 有监督学习和无监督学习_机器学习算法之监督学习和无监督学习比较
  8. 【数据结构和算法笔记】:广义表
  9. yii第三方插件snoopy配置
  10. Python将图片转换成二进制的.txt文件
  11. 在语雀中输入汉语拼音
  12. python 中文变量名_大疆机甲大师Python开发: 中文命名变量初尝试
  13. 4070显卡相当于什么水平 4070显卡参数 rtx4070显卡功耗
  14. 百度也能直播带货!12小时——“慢行”才能持久
  15. Win11右键菜单改回Win10
  16. 冯诺依曼 图灵计算机结构,冯诺依曼与图灵
  17. 人工智能处理的几大基础任务、元宇宙和人工智能
  18. 连接mysql的url是什么意思_URL是什么意思?
  19. MacBook苹果电脑在充电中无法指纹解锁解决办法
  20. 对于VS2012的位图无法加载到资源视图“Bitmap”中的解决方案

热门文章

  1. 如何用技术提高客户服务?
  2. go语言抖音demo
  3. 7.24张小龙内部分享:如何把产品做简单(PM必读)
  4. 聊天机器人-项目准备
  5. 第三周:RIFF、AVI、WAV文件格式分析
  6. PR 2019 快速入门(6)
  7. Unity中常用的单例模式、对象池的脚本模板,连按退出和滑动翻页或放大缩小的功能实现,以及属性在代码中的灵活使用
  8. 台式电脑组装机相关知识之处理器(CPU)篇
  9. android排行,2018安卓手机排行榜 2018安卓手机性能排行榜
  10. 好记性不如烂笔头,记录一下 ORA-30004 :使用sys_connect_by_path 函数时,不能将分隔符作为列值的一部分