第八周 补充 Linux进程管理.docx
- 文档编号:22817862
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:7
- 大小:83.13KB
第八周 补充 Linux进程管理.docx
《第八周 补充 Linux进程管理.docx》由会员分享,可在线阅读,更多相关《第八周 补充 Linux进程管理.docx(7页珍藏版)》请在冰豆网上搜索。
第八周补充Linux进程管理
第八周补充进程管理实验
一、系统调用
系统调用与普通函数的区别:
1)运行于不同的系统状态
2)系统调用需要通过软中断来切换
系统调用是一种进入系统空间的办法。
通常,在OS的核心中都设置了一组用于实现各种系统功能的子程序,并将它们提供给程序员使用。
程序员在需要OS提供某种服务的时候,便可以调用一条系统调用命令,去实现希望的功能,这就是系统调用。
因此,系统调用就像一个黑箱子一样,对用户屏蔽了操作系统的具体动作而只是提供了调用功能的接口。
包括二个步骤:
1)设置系统调用号
2)处理系统调用
Linux系统调用机制:
1)中断
2)软中断:
发送软中断就是向接收进程的proc结构中的相应项发送一个特定意义的信号。
3)陷阱:
由软件产生中断,指处理机和内存内部产生的中断。
4)异常。
二、相关函数
fork(),wait(),exit(),kill(),signal(),pipe()
1)fork()函数:
用于创建一个新进程(子进程)
•intfork();
•pid=fork();
•if(pid<0){
•printf("forkerror\n");
•exit(0);}
•if(pid==0){
•printf("Thechildprocessisrunningnow!
\n");
•exit(0);}
•if(pid>0){
•printf("Theparentprocessisrunningnow!
\n");
•exit(0);}
2).wait()函数:
用来控制父进程与子进程的同步。
•#include
•#include
•(pid_t)wait(int*statloc);
3).exit()函数:
进程结束最常调用的函数
•#include
•voidexit(intstatus);
4).kill()函数:
用于删除执行中的程序或者任务
•kill(intPID,intIID);
5).signal()函数是允许调用进程控制软中断信号的处理
•#include
•intsig;
•void(*func)();
•signal(sig,function);
6).pipe()函数用于创建一个管道。
•其调用格式为:
#include
•pipe(intfp[2]);
三、补充实验一:
编制实现软中断通信的程序
•Childprocess1iskilledbyparent!
!
•Childprocess2iskilledbyparent!
!
•Parentprocessiskilled!
!
•多运行几次编写的程序,简略分析出现不同结果的原因。
参考代码:
#include
#include
#include
#include
intwait_flag;
voidstop();
main(){
intpid1,pid2;//定义两个进程号变量
signal(3,stop);//或者signal(14,stop);
while((pid1=fork())==-1);//若创建子进程1不成功,则空循环
if(pid1>0){//子进程创建成功,pid1为进程号
while((pid2=fork())==-1);//创建子进程2
if(pid2>0){
wait_flag=1;
sleep(5);//父进程等待5秒
kill(pid1,16);//杀死进程1
kill(pid2,17);//杀死进程2
wait(0);//等待第1个子进程1结束的信号
wait(0);//等待第2个子进程2结束的信号
printf("\nParentprocessiskilled!
!
\n");
exit(0);//父进程结束
}
else{
wait_flag=1;
signal(17,stop);//等待进程2被杀死的中断号17
printf("\nChildprocess2iskilledbyparent!
!
\n");
exit(0);
}
}
else{
wait_flag=1;
signal(16,stop);//等待进程1被杀死的中断号16
printf("\nChildprocess1iskilledbyparent!
!
\n");
exit(0);
}
}
voidstop(){
wait_flag=0;
}
四、补充实验二:
编制实现进程的管道通信的程序
使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话:
•Childprocess1issendingamessage!
•Childprocess2issendingamessage!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求:
父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
参考代码:
#include
#include
#include
intpid1,pid2;//定义两个进程变量
main(){
intfd[2];
charOutPipe[100],InPipe[100];//定义两个字符数组
pipe(fd);//创建管道
while((pid1=fork())==-1);//如果进程1创建不成功,则空循环
if(pid1==0){//如果子进程1创建成功,pid1为进程号
lockf(fd[1],1,0);//锁定管道
sprintf(OutPipe,"\nChildprocess1issendingmessage!
\n");//给Outpipe赋值
write(fd[1],OutPipe,50);//向管道写入数据
sleep(5);//等待读进程读出数据
lockf(fd[1],0,0);//解除管道的锁定
exit(0);//结束进程1
}
else{
while((pid2=fork())==-1);//若进程2创建不成功,则空循环
if(pid2==0){
lockf(fd[1],1,0);
sprintf(OutPipe,"\nChildprocess2issendingmessage!
\n");
write(fd[1],OutPipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else{
wait(0);//等待子进程1结束
read(fd[0],InPipe,50);//从管道中读出数据
printf("%s\n",InPipe);//显示读出的数据
wait(0);//等待子进程2结束
read(fd[0],InPipe,50);
printf("%s\n",InPipe);
exit(0);//父进程结束
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八周 补充 Linux进程管理 第八 Linux 进程 管理