前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Linux实验四:进程控制

Linux实验四:进程控制

作者头像
Francek Chen
发布2025-01-22 21:23:43
发布2025-01-22 21:23:43
7100
代码可运行
举报
运行总次数:0
代码可运行

一、实验目的

1、深入理解进程控制相关概念; 2、掌握守护进程及Linux进程之间的关系; 3、掌握进程控制时常用的函数,如fork, wait, exec, exit等。

二、实验内容

某进程创建一子进程,子进程运行“ls -l”指令。要求父进程先以阻塞方式等待子进程结束,当该子进程正常退出后,父进程再创建新的子进程,反复打印“child2 process is active!”;此时结束父进程,并观察子进程的运行情况。

三、实验环境

虚拟机软件:VMware 16 Pro Linux操作系统版本:CentOS-7-64位

四、参考代码

代码语言:javascript
代码运行次数:0
复制
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc,char* argv[]){
    int status;

    status=fork();
    if(-1==status){
        perror("Create Child Process 1 error!\n");
        exit(-1);
    }else if(0==status){
        execl("/bin/ls","ls","-1",NULL);
        exit(0);
    }else if(status>0){
        if(status=wait(NULL)){
            status=fork();
            if(-1==status){
                perror("Create Child Process 2 error!\n");
                exit(-1);
            }else if(0==status){
                while(1){
                    printf("Child2 process is active!\n");
                    sleep(5);
                }
            }else if(status>0){
                exit(0);
            }
        }
    }
}

五、实验步骤

步骤1. 编辑源代码test4.c

源代码test4.c内容见上述参考代码。

代码语言:javascript
代码运行次数:0
复制
mkdir test4
cd test4
vim test4.c

这段代码创建两个子进程,第一个子进程执行ls命令,第二个子进程则进入一个无限循环,每隔5秒输出一次消息。

(1)创建子进程1:

  • status =fork();:调用fork函数创建一个新的进程。如果成功,fork返回两次:在父进程中返回新子进程的进程ID,在子进程中返回0;如果失败,返回-1。
  • 使用perrorexit函数处理创建进程失败的情况。

(2)子进程1执行ls命令:

  • 进入子进程1的执行流程,使用execl函数替换当前进程的映像,以便执行/bin/ls命令。
  • 如果execl执行失败,使用perror打印错误信息,并调用exit退出子进程1。

(3)等待子进程1完成:

  • 在父进程中,使用wait函数等待子进程1的完成。
  • 完成后,再次调用fork函数创建子进程2。

(4)创建子进程2:

  • 与之前类似,再次调用fork函数创建另一个子进程。

(5)子进程2执行循环任务:

  • 在子进程2中,使用无限循环打印信息,并使用sleep函数暂停5秒。

(6)父进程处理:

  • 在父进程中,调用exit函数退出程序。
步骤2. 编译源代码test4.c
代码语言:javascript
代码运行次数:0
复制
gcc test4.c -o test4 -g
步骤3. 运行可执行程序test4
代码语言:javascript
代码运行次数:0
复制
./test4

六、实验结果

实验结果如下图,每隔5秒弹出一条消息。

七、实验总结

  Linux进程控制实验是一项非常重要的实验,可以让学生深入了解Linux操作系统中进程的创建、运行和控制。通过这个实验,我学会了如何使用Linux系统调用来创建、终止和等待进程,以及如何使用信号来处理进程间通信和同步。   进程代表一个程序的一次执行过程,是一个动态的概念,涉及程序运行时执行状态和所使用的资源的管理。在进程控制中,进程主要以三种状态出现:就绪、执行和阻塞。Linux系统将进程的执行划分为用户模式和内核模式。当用户执行应用程序或内核以外的其它程序时,进程运行在用户空间;反之,则运行在内核空间。当用户进程需要内核提供功能支持时,可通过中断或系统调用进入内核空间。   在这个实验中,我学会了如何使用fork()系统调用来创建子进程,并了解了子进程与父进程之间的关系。我还学会了如何使用exec()系统调用来在新的进程中执行程序。此外,我还学会了如何使用wait()和waitpid()系统调用来等待子进程完成,并获取子进程的退出状态。   通过这个实验,我不仅深入了解了Linux操作系统中进程的创建、运行和控制,还掌握了Linux系统调用的使用方法。同时,我也体会到了操作系统中进程间通信和同步的重要性。总之,这个实验让我收获颇丰,希望可以在今后的学习和工作中运用所学知识。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、实验目的
  • 二、实验内容
  • 三、实验环境
  • 四、参考代码
  • 五、实验步骤
    • 步骤1. 编辑源代码test4.c
    • 步骤2. 编译源代码test4.c
    • 步骤3. 运行可执行程序test4
  • 六、实验结果
  • 七、实验总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档