预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验2:进程和线程 实验目的: 理解unix/Linux下进程和线程的创建、并发执行过程。 实验内容: 1.进程的创建 2.多线程应用 实验步骤: 一、进程的创建 下面这个C程序展示了UNIX系统中父进程创建子进程及各自分开活动的情况。 1、实验指导 fork() 创建一个新进程。 系统调用格式: pid=fork() 参数定义: intfork() fork()返回值意义如下: 0:在子进程中,pid变量保存的fork()返回值为0,表示当前进程是子进程。 >0:在父进程中,pid变量保存的fork()返回值为子进程的id值(进程唯一标识符)。 -1:创建失败。 如果fork()调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork()被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork()父进程(parentprocess)的副本,称为子进程(childprocess)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。 2、参考程序代码 /*process.c*/ #include<stdio.h> #include<sys/types.h> main(intargc,char*argv[]) { intpid; /*forkanotherprocess*/ pid=fork(); if(pid<0){/*erroroccurred*/ fprintf(stderr,"ForkFailed"); exit(-1); } elseif(pid==0){/*childprocess*/ execlp("/bin/ls","ls",NULL); //该语句被调用后,子进程被其他进程替代,子进程中的语句将不再被执行 } else{/*parentprocess*/ /*parentwillwaitforthechildtocomplete*/ wait(NULL); printf("ChildComplete!\n"); exit(0); } } 3、编译和运行 $gccprocess.c–oprocesss 4、运行 $./processs 5、思考 系统是怎样创建进程的? 扩展程序,在父进程中输出1到5,在子进程中输出6-10,要求父子进程并发输出;记录实验结果,并给出简单分析。