实验二 进程控制
一、实验目的:
(1) 理解进程的同步、互斥、撤消等控制方法
(2) 熟悉进程间通过软中断传递控制信息的方法(低级通信)
二、实验仪器及材料:
微型计算机、红帽子 Linux 系统
三、实验内容:
任务:并发进程间通过软中断传递控制信号,实现进程同步。
#include
#include
#include
int wait_mark;
void waiting( ),stop( );
main ( ){
int p1,p2;
while ((p1=fork())==-1);
if (p1>0) { /*主进程的处理*/
while ((p2=fork())==-1);
if (p2>0) { /*主进程的处理*/
wait_mark=1;
signal(SIGINT,stop);/*预设对 SIGINT 信号的处理过程*/
waiting();/*等待接收 ctrl+c 信号*/
kill(p1,16);/*向 p1 发出信号 16*/
kill(p2,17);/*向 p2 发出信号 17*/
wait(0);/*同步*/
wait(0);
print(“parents is killed\n”); /*可以增长这个输出,观察它的内
容不会被打断*/
exit(0);
}
else { /*p2 进程的处理*/
wait_mark=1;
signal(17,stop); /*预设对 17 信号的处理过程*/
signal(2,1);/*忽略 ctrl+c*/
waiting();/*等待信号 17*/
lockf(stdout,1,0);/*用上锁的方法实现互斥*/
printf(“P2 is killed by parent\n”);
lockf(stdout,0,0);
exit(0);/*P2 正常结束*/
}
}
else { /*p1 进程的处理*/
wait_mark=1;
signal(16,stop);
signal(2,1);
waiting();/*等待信号 16*/
lockf(stdout,1,0); /*用上锁的方法实现互斥*/
printf(“P1 is killed by parent\n”);
lockf(stdout,0,0);
exit(0); /*P1 正常结束*/
}
}
void waiting()
{
while(wait_mark!=0);
}
void stop()
{
wait_mark=0;
}
运行结果:
思考题:
1 在本程序中,进程的同步和互斥是如何实现的?
答:同步是通过系统调用 wait()使父进程等待子进程结束,否则父进程一直处
于等待的状态。一旦子进程暂停或终止,则调用进程做适当处理后便返回。这样
实现了进程的同步。 互斥是通过系统调用 lockf()使输出段上锁,实现了各个
进程的互斥。
2 在本实验程序中调用 lockf(),参数 stdout 是什么?
答:表示是输出段。