- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八周补充Linux进程管理
第八周 补充 进程管理实验
一、系统调用
系统调用 与 普通函数的区别:
运行于不同的系统状态
系统调用需要通过软中断来切换
系统调用是一种进入系统空间的办法。通常,在OS的核心中都设置了一组用于实现各种系统功能的子程序,并将它们提供给程序员使用。程序员在需要OS提供某种服务的时候,便可以调用一条系统调用命令,去实现希望的功能,这就是系统调用。因此,系统调用就像一个黑箱子一样,对用户屏蔽了操作系统的具体动作而只是提供了调用功能的接口。
包括二个步骤:
设置系统调用号
处理系统调用
Linux系统调用机制:
中断
软中断:发送软中断就是向接收进程的proc结构中的相应项发送一个特定意义的信号。
陷阱:由软件产生中断,指处理机和内存内部产生的中断。
异常。
二、相关函数
fork(),wait(),exit(),kill(),signal(), pipe()
1)fork()函数:用于创建一个新进程(子进程)
int fork();
pid = fork();
if(pid 0) {
printf(fork error\n);
exit(0);}
if(pid == 0) {
printf(The child process is running now!\n);
exit(0);}
if(pid 0) {
printf(The parent process is running now!\n);
exit(0);}
2).wait( )函数:用来控制父进程与子进程的同步。
#include sys/type.h
#include sys/wait.h
(pid_t) wait(int*statloc);
3).exit( )函数:进程结束最常调用的函数
#include stdio.h
void exit(int status);
4).kill( )函数:用于删除执行中的程序或者任务
kill(int PID,int IID);
5).signal()函数是允许调用进程控制软中断信号的处理
#include signal.h
int sig;
void (*func)();
signal(sig,function);
6).pipe()函数用于创建一个管道。
其调用格式为: #include unistd.h
pipe(int fp[2]);
三、补充实验一:编制实现软中断通信的程序
Child process 1 is killed by parent !!
Child process 2 is killed by parent !!
Parent process is killed!!
多运行几次编写的程序,简略分析出现不同结果的原因。
参考代码:
#include stdio.h
#include signal.h
#include unistd.h
#include sys/types.h
int wait_flag;
void stop( );
main( ) {
int pid1, 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结束的信号
pr
文档评论(0)