欢迎来到天天文库
浏览记录
ID:21548217
大小:72.00 KB
页数:11页
时间:2018-10-22
《进程管理实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验三Linux进程基本管理与控制一、实验目的1)通过在linux环境下对进程的基本操作,感性认识进程并区分与程序的区别2)进一步认识并发进程的概念,区别顺序执行和并发执行3)分析进程争用临界资源的现象,学习解决进程互斥的方法二、实验工具Windows2000下虚拟机运行Linux三、实验内容1)打开终端输入进程查看命令ps,熟悉其参数2)kill命令用于删除指定进程3)用系统调用fork.c创建进程编程1.程序代码#include#include#includeintmain(){int
2、pid1,pid2;printf("a");if((pid1=fork())<0){printf("Childfailcreate!");return1;}elseif(pid1==0){printf("b");return;}if((pid2=fork())<0){printf("Child2failcreate!");return1;}elseif(pid2==0){printf("c");return;}}2.程序代码#include#include#include3、>intmain(){intpid1,pid2;printf("ParentProcess:a");if((pid1=fork())<0){printf("Childfailcreate");return1;}elseif(pid1==0){printf("Thisischild1(pid=%d)process:b",getpid());return;}if((pid2=fork())<0){printf("Child2failcreate!");return1;}elseif(pid2==0){printf("Thisischild2(p4、id=%d)process:c",getpid());return;}}3、程序代码#include#include#includeintmain(void){intpid1,pid2;lockf(1,1,0);printf("ParentProcess:a");lockf(1,1,0);if((pid1=fork())<0){printf("child1failcreate");return1;}elseif(pid1==0){lockf(1,1,0);printf("Thi5、schild1(pid=%d)process:b",getpid());lockf(1,0,0);return;}if((pid2=fork())<0){printf("child2failcreate");return1;}elseif(pid2==0){lockf(1,1,0);printf("Thisischild2(pid=%d)process:c",getpid());lock(1,0,0);return;}}1)修改用系统调用fork.c创建子进程,并让进程运行新的程序如,程序一中子进程1运行“ls–l”;子程序2运行“cat/6、etc/passwd”;一、实验结果记录各个程序执行结果二、实验分析总结三、参考四、实验指导1.gcc编译器GNUC编译器(GCC)gcc[options][filenames]不用任何选项编译一个程序时,GCC将会建立(假定编译成功)一个名为a.out的可执行文件.例如,gcctest.c将在当前目录下产生一个叫a.out的文件:用-o编译选项来为将产生的可执行文件指定一个文件名来代替a.out:gcc-ocountcount.c 注意:当你使用-o选项时,-o后面必须跟一个文件名.2.Linux进程创建相关的系统调用(1)fork()创建一个新7、的子进程。其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录和资源限制。系统调用格式:intfork()如果Fork成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork失败则直接返回-1。(2)getpid()取得目前进程的识别码(进程ID),许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。系统调用格式:intgetpid()例如:#includemain(){printf(“pid=%d”,getpid());}8、(3)getppid取得目前进程的父进程识别码。系统调用格式:intgetppid()例如:#
3、>intmain(){intpid1,pid2;printf("ParentProcess:a");if((pid1=fork())<0){printf("Childfailcreate");return1;}elseif(pid1==0){printf("Thisischild1(pid=%d)process:b",getpid());return;}if((pid2=fork())<0){printf("Child2failcreate!");return1;}elseif(pid2==0){printf("Thisischild2(p
4、id=%d)process:c",getpid());return;}}3、程序代码#include#include#includeintmain(void){intpid1,pid2;lockf(1,1,0);printf("ParentProcess:a");lockf(1,1,0);if((pid1=fork())<0){printf("child1failcreate");return1;}elseif(pid1==0){lockf(1,1,0);printf("Thi
5、schild1(pid=%d)process:b",getpid());lockf(1,0,0);return;}if((pid2=fork())<0){printf("child2failcreate");return1;}elseif(pid2==0){lockf(1,1,0);printf("Thisischild2(pid=%d)process:c",getpid());lock(1,0,0);return;}}1)修改用系统调用fork.c创建子进程,并让进程运行新的程序如,程序一中子进程1运行“ls–l”;子程序2运行“cat/
6、etc/passwd”;一、实验结果记录各个程序执行结果二、实验分析总结三、参考四、实验指导1.gcc编译器GNUC编译器(GCC)gcc[options][filenames]不用任何选项编译一个程序时,GCC将会建立(假定编译成功)一个名为a.out的可执行文件.例如,gcctest.c将在当前目录下产生一个叫a.out的文件:用-o编译选项来为将产生的可执行文件指定一个文件名来代替a.out:gcc-ocountcount.c 注意:当你使用-o选项时,-o后面必须跟一个文件名.2.Linux进程创建相关的系统调用(1)fork()创建一个新
7、的子进程。其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录和资源限制。系统调用格式:intfork()如果Fork成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork失败则直接返回-1。(2)getpid()取得目前进程的识别码(进程ID),许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。系统调用格式:intgetpid()例如:#includemain(){printf(“pid=%d”,getpid());}
8、(3)getppid取得目前进程的父进程识别码。系统调用格式:intgetppid()例如:#
此文档下载收益归作者所有