1、实验 2:进程和线程实验目的:理解 unix/Linux 下进程和线程的创建、并发执行过程。实验内容:1进程的创建2多线程应用实验步骤:一、进程的创建下面这个 C 程序展示了 UNIX 系统中父进程创建子进程及各自分开活动的情况。1、实验指导fork( ) 创建一个新进程。 系统调用格式: pid=fork( )参数定义:int fork( )fork( )返回值意义如下:0:在子进程中,pid 变量保存的 fork( )返回值为 0,表示当前进程是子进程。0:在父进程中,pid 变量保存的 fork( )返回值为子进程的 id 值(进程唯一标识符) 。-1:创建失败。如果 fork( )调用
2、成功,它向父进程返回子进程的 PID,并向子进程返回 0,即 fork( )被调用了一次,但返回了两次。此时 OS 在内存中建立一个新进程,所建的新进程是调用fork( )父进程( parent process)的副本,称为子进程(child process) 。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。2、参考程序代码/*process.c*/#include #include main(int argc,char *argv)int pid; /* fork another process */pid = fork();if (pid 0)
3、 /* error occurred */fprintf(stderr, “Fork Failed“);exit(-1); else if (pid = 0) /* child process */execlp( “/bin/ls“, “ls“,NULL);/该语句被调用后,子进程被其他进程替代,子进程中的语句将不再被执行else /* parent process */* parent will wait for the child to complete */wait(NULL);printf( “Child Complete!n“ );exit(0); 3、编译和运行$gcc process.c o processs4、运行$ ./processs5、思考(1) 系统是怎样创建进程的?(2) 扩展程序,在父进程中输出 1 到 5,在子进程中输出 6-10,要求父子进程并发输出;记录实验结果,并给出简单分析。