0


操作系统课程设计-Linux 进程控制

前言

     本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭,另外,本次实验所用平台是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之后,会等待子进程执行完才会继续执行,结果如下图所示:

图1.2 实验2-2步骤2

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 ubuntu

本文转载自: https://blog.csdn.net/qq_63306482/article/details/135660540
版权归原作者 望525 所有, 如有侵权,请联系我们删除。

“操作系统课程设计-Linux 进程控制”的评论:

还没有评论