操作系统实验实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Child Processl2 is Killed by Parent!
父进程等待两个子进程终止后,输出如下的信息后终止
Parent Process is Killed!
四、设计思路和流程图
五、源程序:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
(4)了解Linux系统中进程通信的基本原理。
三、实验题目
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child Processll is Killed by Parent!
wait(0);
wait(0);
printf("parent process is over!");
exit(0);
}
else
{
wait_mark = 1;
signal(17, stop);
signal(SIGINT, SIG_IGN);
while(wait_mark != 0);
lockf(1, 1, 0);
}
void main()
{
int p1, p2;
if(p1 = fork())
{
if(p2 = fork())
{
wait_mark = 1;
signal(SIGINT, stop);
signal(SIGALRM, alarming);
waiting();
kill(p1, 16);
kill(p2, 17);
printf("child 1 is over !\n");
lockf(1, 1, 0);
exit(0);
}
}
六、程序运行时的初值和运行结果
不做任何操作等待五秒钟父进程回在子进程县推出后退出,并打印退出的顺序;或者点击ctrl+C后程序退出并打印退出的顺序。
七、实验体会
通过父进程的kill(),使子进程获得中断进程信号。其中signal(),用于接受信号,在SIGINT,和SIGALRM两种情况下,有不同的相应。
#include"stdlib.h"
int wait_mark;
void waiting()
{
sleep(5);
if(wait_mark != 0)
{
kill(getpid(), SIGALRM);
}
}
void alarming()
{
wait_mark = 0;
}
void stop()
{
wait_mark = 0;
printf("child 2 is over !\n");
lockf(1, 1, 0);
exit(0);
}
}
else
{
wait_mark = 1;
signal(16, stop);
signal(SIGINT, SIG_IGN);
while(wait_mark != 0);
lockf(1, 1, 0);
烟台大学计算机学院
操作系统
实验报告书
班级:计114-3班
姓名:刘镇
学号:201158504337
日期:2013-6-7
《计算机操作系统》实验报告
ቤተ መጻሕፍቲ ባይዱ一、实验内容
(2.3)进程的软中断通信
二、实验目的
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)分析进程竞争资源现象,学习解决进程互斥的方法。
父进程等待两个子进程终止后,输出如下的信息后终止
Parent Process is Killed!
四、设计思路和流程图
五、源程序:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
(4)了解Linux系统中进程通信的基本原理。
三、实验题目
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child Processll is Killed by Parent!
wait(0);
wait(0);
printf("parent process is over!");
exit(0);
}
else
{
wait_mark = 1;
signal(17, stop);
signal(SIGINT, SIG_IGN);
while(wait_mark != 0);
lockf(1, 1, 0);
}
void main()
{
int p1, p2;
if(p1 = fork())
{
if(p2 = fork())
{
wait_mark = 1;
signal(SIGINT, stop);
signal(SIGALRM, alarming);
waiting();
kill(p1, 16);
kill(p2, 17);
printf("child 1 is over !\n");
lockf(1, 1, 0);
exit(0);
}
}
六、程序运行时的初值和运行结果
不做任何操作等待五秒钟父进程回在子进程县推出后退出,并打印退出的顺序;或者点击ctrl+C后程序退出并打印退出的顺序。
七、实验体会
通过父进程的kill(),使子进程获得中断进程信号。其中signal(),用于接受信号,在SIGINT,和SIGALRM两种情况下,有不同的相应。
#include"stdlib.h"
int wait_mark;
void waiting()
{
sleep(5);
if(wait_mark != 0)
{
kill(getpid(), SIGALRM);
}
}
void alarming()
{
wait_mark = 0;
}
void stop()
{
wait_mark = 0;
printf("child 2 is over !\n");
lockf(1, 1, 0);
exit(0);
}
}
else
{
wait_mark = 1;
signal(16, stop);
signal(SIGINT, SIG_IGN);
while(wait_mark != 0);
lockf(1, 1, 0);
烟台大学计算机学院
操作系统
实验报告书
班级:计114-3班
姓名:刘镇
学号:201158504337
日期:2013-6-7
《计算机操作系统》实验报告
ቤተ መጻሕፍቲ ባይዱ一、实验内容
(2.3)进程的软中断通信
二、实验目的
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)分析进程竞争资源现象,学习解决进程互斥的方法。