最新Linux多进程并发执行实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
1
2
1、对理论课中学习的进程、程序等的概念作进一步的理解,明确进程和程序3
的区别;
2、加深理解进程并发执行的概念,认识多进程并发执行的实质;
4
5
3、观察进程争夺资源的现象,分析其过程和原因,学习解决进程互斥的方法;6
4、对经典的多用户、多任务的优先级轮转调度系统Linux有一定的了解;
7
5、了解Linux系统中多进程之间通过管道通信的基本原理和应用方法。
8
9
二、实验内容
10
1、用virtual虚拟机运行linux虚拟系统;
11
2、分析并理解源程序;
12
3、在linux中输入相应程序并观察运行结果。
13
14
三、实验原理
15
(一)多进程并发执行是使用后台任务来实现任务的“多进程化”。在不加控16
制的模式下,不管有多少任务,全部都后台执行。也就是说,在这种情况下,有17
多少任务就有多少“进程”在同时执行。
18
(二)实验中要用到的函数
19
1、fork()函数——进程创建函数。
2、getpid()函数——取得目前进程的进程标识码。
20
21
3、exit()函数——用来正常终结目前进程的执行。
22
4、sleep()函数——用来延时,它会被挂起,把处理器让给其他的进程。
23
5、printf()函数——是格式化输出函数, 一般用于向标准输出设备按规24
定格式输出信息。
25
(三)实验中要用的命令
1、cd 命令:
26
27
功能:改变工作目录。
28
语法:cd [directory]
说明:该命令将当前目录改变至directory所指定的目录。若没有指定
29
30
directory,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定31
目录的执行和读权限。该命令可以使用通配符。
32
2、mkdir命令:
33
功能:创建一个目录(类似MSDOS下的md命令)。
34
语法:mkdir [选项] dir-name
35
说明:该命令创建由dir-name命名的目录。要求创建目录的用户在当前目录36
中(dir-name的父目录中)具有写权限,并且dirname不能是当前目录中已有37
的目录或文件名称。
38
3、ls 命令:
功能:ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常
39
40
用的一个命令之一,因为用户需要不时地查看某个目录的内容。该命令类似于
41
DOS下的dir命令。
42
语法:ls [选项] [目录或是文件]
43
说明:对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文44
件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母45
顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。
46
4、vim、clear命令在这里就不做介绍了。
47
(四)实验源程序如下:
48
#include
49
#include
50
#include
#include
51
52
#include
53
main(){
int pid1,pid2,i=1;
54
55
while((pid1=fork())==-1);
56
if(pid1==0){
57
printf("This is child process 1,pid=%d\n",getpid());
58
sleep(1);
59
for(i='A';i<='Z';i++){
printf("Child process1 print:%c\n",i);
60
61
sleep(1);
62
}
63
exit(0);
64
} else{
65
while((pid2=fork())==-1);
66
if(pid2==0){
67
printf("This is child process 2,pid=%d\n",getpid());
68
sleep(1);
69
for(i='a';i<='z';i++){
70
printf("Child process1 print:%c\n",i);
71
sleep(1);
72
} exit(0);
73
} else{printf("This is a parent process,pid=%d\n",getpid());
74
sleep(1);
75
for(i=1;i<=26;i++){
76
printf("Parent process print:%d\n",i);
77
sleep(1);