操作系统进程控制实验报告(3)
时间:2025-07-15
时间:2025-07-15
{
printf(“fork error!”); exit(0); }
else if (pid==0) {
if(execve(path,argv,0)<0) {
printf(“fork error!”); exit(0); }
printf(“child is ok!\n”); exit(0); }
wait( );
printf(“it is ok!\n”); exit(0); }
3.创建一个共享内存,实现一个生产者进程写共享内存,一个消费者进程读共享内存,并在写前读后输出写和读的内容。
4.创建一个共享文件,实现一个写者进程写文件,2个读者在写者写后分别读出文件的内容,并给出读后评价。
二、实验指导
Linux中与进程控制相关的几个主要系统调用
三、实验步骤(附程序原码)
实验一:创建文件wang.c,编写C语言程序,实现在程序运行时通过系统调用fork
()创建两个子进程,使父,子三进程并发进行,父亲进程执行时屏幕显示“parent”,儿子进程执行时屏幕显示“son”,女儿进程执行时屏幕显示“daugher”。程序如下:
(进程一)#include<stdio.h>
int main()
{ int p1,p2,i;
while((p1=fork())==-1); if(p1==0)
for(i=0;i<4;i++)
printf("daughter%d\n",i); else
{ while((p2=fork())==-1); if(p2==0)
for(i=0;i<4;i++)
printf("son%d\n",i); else
for(i=0;i<4;i++)
printf("parent%d\n",i); } }
(进程二)
#include<stdio.h> int main() {
int pid; pid=fork(); switch(pid)
{ case -1:printf("fork fail\n");exit(1); case 0:printf("subprocess\n");exit(0);
default:wait(0);printf("completed\n");exit(0); } }
实验二:
编写程序,用fork创建两个子进程,再用系统调用signal让父进程捕捉键盘上传来的中
断信号,捕捉到中断信号后,父进程用系统调用kill向两个子进程发出信号,子进程终止。父进程等待两个子进程终止后终止。程序代码如下 #include<stdio.h> #include<signal.h> #include<unistd.h>
void waiting(),stop(); int wait_mark; int main() {
int p1,p2,stdout; signal(SIGINT,stop); while((p1=fork())==-1); if(p1>0) {
while((p2=fork())==-1); if(p2>0) {
wait_mark=1; sleep(5); waiting(); kill(p1,16); kill(p2,17); wait(0); wait(0);
printf("Parent process is killed!\n"); exit(0); } else {
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 {
wait_mark=1;
signal(16,stop); waiting();
lockf(stdout,1,0);
printf("Child process 1 is killed by parent!\n");
上一篇:2009年结算规定(正式)
下一篇:多元统计分析实验的原始数据