最新实验一-进程控制实验汇编.docxVIP

  • 4
  • 0
  • 约3.26千字
  • 约 5页
  • 2021-01-22 发布于天津
  • 举报
实验一进程控制 一、 实验目的: 加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终 止操作,体会父进程和子进程的关系及进程状态的变化; 进一步认识并发执行的实质, 编写 并发程序。 二、 实验平台: 虚拟机:VMWare9以上 操作系统:Ubuntu12.04以上 编辑器:Gedit | Vim 编译器:Gcc 三、 实验内容: (1)编写一段程序,使用系统调用 fork()创建两个子进程,当此程序运行时,在系统中 有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息” :父进程显示 Parent process! PID=xxx1 PPID=xxx2 ;子进程显示Childx process! PID=xxx PPID=xxx 多运行几次,观察记录屏幕上的显示结果,并分析原因。 说明: xxx1为进程号,用getpid()函数可获取进程号; xxx2为父进程号,用 getppid()函数可获取父进程号; Childx中x为1和2,用来区别两个子进程; wait()函数用来避免父进程在子进程终止之前终止。 程序源码: #includestdio.h } } } } #includeunistd.h #includestdlib.h #define NUM 2 int main(void) ( pid_t pid1,pid2; if((pid仁fork())0){ printf(创建进程1失败); }else{ if(pid1==0){ 〃子进程1执行 printf(Child1 process: ); printf(PID=%d PPID=%d \n”,getpid(),getppid()); sleep(2); }else{ if((pid2=fork())0){ printf(创建进程2失败); }else{ if(pid2==0){ 〃子进程2执行 printf(Child2 process: ); printf(PID=%d PPID=%d \n,getpid(),getppid()); } else{ 〃父进程执行 wait(); wait(); printf(Parent process: ); printf(PID=%d PPID=%d \n,getpid(),getppid()); exit(0); } } 执行结果 whtcmiss@whtcmiss-Virtua IB ox:~/Desktop$ gcc testl.c -o test whtcmiss@whtcmiss-Virtua lB ox:~/Desktop$ ./test Child2 process: PID=2527 PPID=2525 Child1 process: PID=2526 PPID=2525 Parent process: PID=2525 PPID=2127 whtcmiss@whtcmiss-Virtua lB ox:~/Desktop$ ./test Child2 process: PID=2530 PPID=2528 Child1 process: PID=2529 PPID=2528 Parent process: PID=2528 PPID=2127 whtcmiss@whtcmiss-Virtua lB ox:~/Desktop$ ./test Child2 process: PID=2533 PPID=2531 Child1 process: PID=2532 PPID=2531 Parent process: PID=2531 PPID=2127 实验结果分析: 第一次程序运行结果,两个子进程的PPID都是2525,是由同一个进程创建。而父进程 PID是2525,父进程PPID是2127,说明父进程也是一系统进程的子进程。 第二次程序运行结果, 父进程PID是2528, PPID是2127,说明父进程是由同一进程创 建的,父进程也是以子进程的方式存在,且进程 ID是逐渐递增的。 (2) fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行 的程序single.c改造成可并发执行3个进程的程序multi_process.c;并用time命令获取程序的执 行时间,比较单进程和多进程运行时间,并分析原因。 //single.c #include stdio.h #define NUM 5 int main(void) { void print_msg(char *m); print_msg(Good ); print_msg(Morning ); print_msg(007\n”); 〃将007替换为本人学号 return 0; ) voi

文档评论(0)

1亿VIP精品文档

相关文档