目录
前言
1 实验题目
2 实验目的
3 实验内容
3.1 进程的创建
3.1.1 步骤
3.1.2 关键代码
3.2 子进程执行新任务
3.2.1 步骤
3.2.2 关键代码
4 实验结果与分析
4.1 进程的创建
4.2 子进程执行新任务
5 代码
5.1 进程的创建
5.2 子进程执行新任务
前言
本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭,另外,本次实验所用平台是Ubuntu 22.04 LTS,代码均是在终端进行编译的,不会的可以先了解怎么用终端编程,或者利用其他较为智能的开发环境进行编程
1 实验题目
实验二 Linux 进程管理
2 实验目的
通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。
3 实验内容
3.1 进程的创建
3.1.1 步骤
(1)步骤1:在目录实验2下用touch命令新建一个实验2-1.c文件,利用gedit命令打开编辑,复制清单3-1中的代码到实验2-1.c文件中并保存,利用gcc命令将其编译成可执行文件实验2-1。
(2)步骤2:在命令行输入./实验2-1运行该程序,观察运行结果。
(3)步骤3:多次运行程序,观察运行结果。
3.1.2 关键代码
if (x==0)
{
sleep(rand() % 2);
printf("a\n");
}
else
{
sleep(rand() % 3);
printf("b\n");
}
if(x==0)printf("cc\n");
else printf("fc\n");
3.2 子进程执行新任务
3.2.1 步骤
(1)步骤1:在目录实验2下用touch命令新建一个实验2-2.c文件,利用gedit命令打开编辑,复制清单3-2中的代码到实验2-2.c文件中并保存,利用gcc命令将其编译成可执行文件实验2-2。
(2)步骤2:在命令行输入./实验2-2运行该程序,观察运行结果。
3.2.2 关键代码
pid_t pid;
/*fork another process*/
pid = fork();
if(pid<0){
fprintf(stderr,"Fork Failed");
exit(-1);
}else if(pid==0){
execlp("/bin/ls","ls",NULL);
}else{/*parent process*/
/*parent wait for the child to complete*/
wait(NULL);
printf("Child Complete\n");
exit(0);
}
4 实验结果与分析
4.1 进程的创建
执行步骤2和3后,可以看到每次的结果不一定相同,可能是父进程先执行完毕,也可能是子进程先执行完毕,这说明进程的调度是不可预测的,即程序的执行不可在现,结果如下图所示:
图1.1 实验2-1步骤2和3
4.2 子进程执行新任务
执行步骤2后,会看到在终端上先输出了目录下的文件情况,再输出”Child Compelete”,说明父进程执行wait之后,会等待子进程执行完才会继续执行,结果如下图所示:
文章来源:https://www.toymoban.com/news/detail-802669.html
图1.2 实验2-2步骤2文章来源地址https://www.toymoban.com/news/detail-802669.html
5 代码
5.1 进程的创建
#include<stdio.h>
#include<stdlib.h>
int main(void){
int x;
srand((unsigned)time(NULL));
while((x=fork())==-1);
if(x==0){
sleep(rand()%2);
printf("a\n");
}else{
sleep(rand()%3);
printf("b\n");
}
if(x==0)printf("cc\n");
else printf("fc\n");
}
5.2 子进程执行新任务
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
int main(void){
pid_t pid;
/*fork another process*/
pid = fork();
if(pid<0){
fprintf(stderr,"Fork Failed");
exit(-1);
}else if(pid==0){
execlp("/bin/ls","ls",NULL);
}else{/*parent process*/
/*parent wait for the child to complete*/
wait(NULL);
printf("Child Complete\n");
exit(0);
}
}
到了这里,关于操作系统课程设计-Linux 进程控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!