CV实验报告手机端适配有问题
建议电脑端
《操作系统》实验报告
姓名 | Rhyme_7 | 学号 | 777777 | |
实验序号 | 3 | 实验名称 | 实验三 进程管理 | |
实验目的 | 1.加深对进程概念的理解,进一步认识并发执行的实质。 2.掌握在Linux 操作系统中创建子进程并加载新映像的操作。 3.掌握有关进程的管理机制。 | |||
实验内容 | ||||
实验题目(1) | 编写一个C 程序,使用系统调用fork()创建一个子进程,并使用这个子进程调用exec 函数族以执行系统命令ls。 | |||
实验代码、实验过程(界面方式下的抓图)、实验结果(抓图) | #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<sys/types.h> #include<sys/wait.h> int main(){ int pid; pid=fork(); /* 创建子进程 */ switch(pid){ case -1: /* 创建失败 */ printf("fork fail!\n"); exit(1); case 0: /* 子进程*/ printf("Child process PID:%d.\n",getpid()); execlp("/bin/ls","ls",NULL); /* 装载子进程映像 ls 命令*/ printf("exec fail!\n"); exit(1); default: /* 父进程*/ printf("Parent process PID: %4d.\n",getpid()); wait(NULL); /* 父进程等待子进程运行完毕 */ printf("ls completed !\n"); exit(0); } return 0; } 问题1:该程序中一共有几个进程并发? 两个 问题2:wait(NULL)起到了什么作用,如果删除会出现什么情况,为什么? wait()调用后立即阻塞自己,直到当前进程的某个子进程退出。其参数用来保存被收集进程退出时的一些状态。如果我们不关心子进程是如何死掉,只想把这个僵尸进程消灭掉,我们就可以设定这个参数为NULL。 所以作用是等待子进程运行完毕,消灭僵尸进程。 如果删掉wait(NULL)将不会等待,子进程将成为僵尸进程。 | |||
实验心得(遇到什么问题,如何解决) | 不太懂各个函数。查看课堂派文档和PPT | |||
实验题目(2) | 编写一个C程序,使用系统调用fork()创建一个子进程,并使这个子进程在退出时通过exit()给出退出参数,父进程通过wait()收集子进程返回的参数并显示。 | |||
实验代码、实验过程(界面方式下的抓图)、实验结果(抓图) | #include<stdio.h> #include<sys/types.h> #include<sys/wait.h> #include<unistd.h> #include<stdlib.h> int main(){ int status; pid_t pc,pr; pc=fork(); if(pc<0) printf("error ocurred!\n"); else if(pc==0){ printf("This is child process with pid of %d.\n",getpid()); exit(3); } else{ pr=wait(&status); if(WIFEXITED(status)){ printf("the child process exit normally.\n"); printf("the return code is %d.\n",WEXITSTATUS(status)); } else printf("the child process exit abnormally.\n"); } } 问题1:该程序中的pr变量的值代表的什么含义? Pr的值是一个整数值(int),指出了子进程是正常退出还是被非正常结束的,以及正常结束时的返回值,或被哪一个信号结束的等信息。 WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status) 就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。 此次运行结果就是exit(3) 问题2:如果程序中出现出现exit(0)和exit(1)代表什么意思? exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止 | |||
实验心得(遇到什么问题,如何解决) | 不太明白wait()参数的意义。查找资料: | |||
实验题目(3) | 3.3编写程序:创建一对父子进程,实验wait同步函数。要求子进程休眠5秒,父进程不休眠。但需要父进程等待子进程,并在子进程结束后收集子进程用exit返回的参数。 | |||
实验代码、实验过程(界面方式下的抓图)、实验结果(抓图) | #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<sys/types.h> #include<sys/wait.h> int main(){ int status; pid_t pid = fork(); if(pid<0){ printf("error ocurred!\n"); } else if(pid==0){ printf("This is child process with pid of %d.\n",getpid()); sleep(5); exit(0); } else{ printf("Parent process PID: %4d.\n",getpid()); wait(&status); printf("the child return code is %d.\n",WEXITSTATUS(status)); } } 5s后: | |||
实验心得(遇到什么问题,如何解决) | 无 | |||
参考:
实验三 进程管理_Re:从零开始的代码生活的博客