进程的创建撤销和控制

一、实验名称
进程的创建撤销和控制
二、实验内容
学生独立设计用于描述进程的数据结构,完成进程的创建、同步和互斥。
三、实验原理和设计思路
在Linux系统下用fork()函数创建进程,lockf()函数对进程加锁,实现进程的创建撤销与控制。
四、源代码
1.进程的创建

#include<stdio.h>
main()
{int p1,p2;
while((p1=fork())==-1);
if(p1==0)
putchar('b');
else
{while((p2=fork())==-1);
if(p2==0)
putchar('c');
else
putchar('a');
}
}

2.进程的控制

#include<stdio.h>
main()
{int p1,p2,i;
while((p1=fork())==-1);
if(p1==0)
for(i=0;i<50;i++)
printf("child %d\n",i);
else
{while((p2=fork())==-1);
if(p2==0)
for(i=0;i<50;i++)
printf("son %d\n",i);
else
for(i=0;i<50;i++)
printf("daughter %d\n",i);
}
}

3.进程的控制2

#include<stdio.h>
#include<unistd.h>
main()
{int p1,p2,i;
while((p1=fork())==-1);
if(p1==0)
{lockf(1,1,0);
for(i=0;i<50;i++)
printf("child %d\n",i);
lockf(1,0,0);
}
else
{while((p2=fork())==-1);
if(p2==0)
{lockf(1,1,0);
for(i=0;i<50;i++)
printf("son %d\n",i);
lockf(1,0,0);
}
else
{lockf(1,1,0);
for(i=0;i<50;i++)
printf("daughter %d\n",i);
lockf(1,0,0);
}
}
}

4.软中断通信

#include<unistd.h>
#include<stdio.h>
#include<signal.h>
void waiting(),stop();
int wait_mark;
main()
{int p1,p2;
while((p1=fork())==-1);
if(p1>0)
{while((p2=fork())==-1);
if(p2>0)
{printf("parent \n");
wait_mark=1;
signal(SIGINT,stop);
waiting(0);
kill(p1,16);
kill(p2,17);
wait(0);
wait(0);
printf("parent process is killed! \n" );
exit(0);
}
else
{printf("p2 \n");
wait_mark=1;
signal(17,stop);
waiting();
lockf(stdout,1,0);
printf("child process 2 is killed by parent! \n");
lockf(stdout,0,0);
exit(0);
}
}
else
{printf("p1\n");
wait_mark=1;
signal(16,stop);
waiting();
lockf(stdout,1,0);
printf("chile process 1 is killed by parent! \n");
lockf(stdout,0,0);
exit(0);
}
}
void waiting()
{while(wait_mark!=0);
}
void stop()
{wait_mark=0;
}

5.软中断通信2

#include<unistd.h>
#include<stdio.h>
#include<signal.h>int pid1,pid2;
int EndFlag=0,pf1,pf2=0;void IntDelete()
{kill(pid1,16);
kill(pid2,17);
EndFlag=1;
}
void Int1()
{printf("child process 1 is killed by parent!");
exit(0);
}
void Int2()
{printf("child process 2 is killed by parent!");
exit(0);
}
main()
{int exitpid;
signal(SIGINT,SIG_IGN);
signal(SIGQUIT,SIG_IGN);
while((pid1=fork())==-1);
if(pid1==0)
{printf("p1\n");
signal(SIGUSR1,Int1);
signal(16,SIG_IGN);
pause();
exit(0);
}
else
{while((pid2=fork())==-1);
if(pid2==0)
{printf("p2\n");
signal(SIGUSR2,Int2);
signal(17,SIG_IGN);
pause();
exit(0);
}
else
{printf("parent\n");
signal(SIGINT,IntDelete);
waitpid(-1,&exitpid,0);
printf("parent process is killed!\n");
exit(0);
}
}
}

五、结果截图

图 1 进程的创建

图 2 进程的控制

图 3 进程的控制

图 4 进程的控制

图 5 进程的控制(2)

图 6 进程的控制(2)

图 7 进程的控制(2)

六、编程体会
         在这次的操作系统实验中,系统环境从Windows换为了Linux,开始的时候有很多地方都不是很适应。比如在Linux中的vim编辑器编写代码非常困难,因为很多的快捷键也忘的差不多了,而且编写习惯又与Windows下编译器有点不一样。之后就好多了,通过一个一个查阅资料,多敲了几遍代码,慢慢的也可以掌握一些Linux环境下的基础操作。在程序编写过程中,涉及了用fork()函数创建进程,lockf()函数对进程加锁,实现进程的创建撤销与控制。这些在以往的代码编写中是没有遇到的,遇到了很大的难题。比如fork()函数的具体作用是什么?如果使用?只好通过询问同学、老师,查询资料,慢慢的才理解fork()函数的真正意思。通过这次实验,使得自己对于进程的创建、撤销、控制等基本操作有了初步的了解,希望对今后的学习生活有所帮助。

操作系统实验--进程的创建撤销和控制相关推荐

  1. Linux实验三父子进程每隔3秒,实验三进程的创建和简单控制(学生分析.doc

    实验三进程的创建和简单控制(学生分析 实验 进程的创建和简单控制 实验目的: 掌握进程的概念和进程的状态,对进程有感性的认识: 掌握进程创建方法: 认识进程的并发执行,了解进程族之间各种标识及其存在的 ...

  2. 操作系统实验进程控制(C语言版)

    操作系统实验进程控制 1.实验目的 2.实验内容 3.实验准备 3.1进程 3.1.1进程的含义 3.1.2进程状态 3.1.3进程状态之间的装换 3.2进程控制块 3.3进程的创建与撤消 3.4进程 ...

  3. 操作系统实验-进程控制(python实现)

    操作系统实验-进程控制(python实现) 一.实验目标 模拟操作系统对进程的管理.实现进程之间的切换. 二.实验要求 (1)单处理机,即一次只能 1 个进程处于运行态 (2)内核实现进程切换和进程调 ...

  4. Linux多线程矩阵,操作系统实验(进程)多线程实现矩阵乘法

    <操作系统实验(进程)多线程实现矩阵乘法>由会员分享,可在线阅读,更多相关<操作系统实验(进程)多线程实现矩阵乘法(6页珍藏版)>请在人人文库网上搜索. 1.多线程编程实现矩阵 ...

  5. 【操作系统】进程的创建与终止过程中的父子进程

    进程在执行过程中,能通过系统调用创建多个新进程. 创建进程称为父进程,而新进程称为该进程的子进程.每一个新进程可以再创建其他进程,从而形成了进程树. 通常,进程需要一定的资源(如CPU时间.内存.文件 ...

  6. 山东大学软件学院操作系统实验1(关于环境)

    目录 1.写在前面 2.关于环境 3.关于函数和操作 4.具体代码 1.写在前面 2023年山东大学操作系统实验,第一次实验肥肠简单,压缩以后代码仅仅几行罢了 实验要求只是:创建一个父进程,然后创建子 ...

  7. 山东大学2023操作系统实验2

    目录 (1)操作系统实验2内容: (2)完成方式: (3)使用函数和功能: 1.pipe函数与有关的功能 2.pipe的返回值 3.pipe的参数 4.使用事项: (4)实现代码 (5)实现效果 (1 ...

  8. 操作系统实验二进程的创建控制实验(含代码及实验心得)

    实现工具:PC机 实现环境:Linux 实习内容(功能.目标): 实验目的:  创建进程,体会进程间的并发特征. 实验内容:  编写一段程序,使用系统调用 fork() 创建两个子进程 p1 和 p2 ...

  9. 实验四 linux进程控制实验报告,Linux系统进程控制操作系统实验报告4

    实验课程名称:操作系统 实验项目名称Linux系统进程控制实验成绩 实验者专业班级组别 同组者实验日期年月日第一部分:实验分析与设计(可加页) 实验内容描述(问题域描述) 要求:掌握Linux系统中进 ...

最新文章

  1. java is not a enclosing class_Java Class getEnclosingClass()用法及代码示例
  2. 大学计算机专业和物理专业哪个难,大学里最难毕业的3大专业,尤其是最后一个...
  3. 资讯|WebRTC M91 更新
  4. java和netbeans区别_如果我想只使用Java中的Eclipse和Netbeans有什么区别?
  5. 用ARM DS-5进行android linux开发
  6. 前端工程师面试题汇总--技术
  7. Nginx (1)---安装配置
  8. 无损连接性、保持函数依赖1
  9. java我的世界显示合成表_我的世界:若从你的背包移除“合成表”,回到5年前,最原始状态...
  10. tomcat日志配置(停止日志或修改日志路径)
  11. 转载一篇适合初学者“区分自由浮动时间和总浮动时间”的文章
  12. weak和alias
  13. 手机锁屏密码忘了怎么办
  14. php主机安装教程,easypanel 主机面板安装教程
  15. Unity二维平面上物体的移动(十一)-位移和推动力移动的区别
  16. 高数习题9.69.7
  17. Excel 2019:二级级联下拉框设置
  18. Android图片转换
  19. 喝不完的杯中酒,割不尽的名人头
  20. 简述TCP的三次握手

热门文章

  1. Tableau和FineReport(帆软)的区別!
  2. MT【247】恒成立画图像
  3. iOS11 和 iPhone X 的适配
  4. 清华计算机专业课程列表
  5. 2018最新IntelliJ IDEA全局内容搜索和替换教程
  6. 【推荐与广告】积累与发现
  7. 美国飞行员睡眠训练法:心事再多,都能让你在120秒内入睡
  8. 草图大师 SketchUp Pro 2019 19.1.173 Mac 中文特别版设计工具
  9. 基于51单片机的RFID智能门禁系统
  10. Linux内核4.14版本——drm框架分析(1)——drm简介