Linux实验四:进程控制


一、实验目的

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

二、实验内容

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

三、实验环境

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

四、参考代码

#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内容见上述参考代码。

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

gcc test4.c -o test4 -g

在这里插入图片描述

步骤3. 运行可执行程序test4

./test4

在这里插入图片描述

六、实验结果

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

在这里插入图片描述

七、实验总结

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

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
一、 实验目的 1、通过实验了解和熟悉Linux网络服务; 2、掌握Linux下建立Web服务器; 3、掌握Linux下建立FTP服务器。 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 1、了解和熟悉Linux网络服务 了解NFS网络文件系统,NFS网络文件系统架设及挂载方法,Web服务器的架设方法,FTP服务器的架设方法及访问方法,Samba服务器的架设方法。 2、Linux下建立Web服务器 (1)Apache 服务器的安装及启动 ●检测与安装 Apache rpm -qa | grep httpd ●如果没有检测到软件包,需要进行安装,在安装目录中,执行如下命令: rpm -ivh httpd-tools*. Rpm rpm -ivh mailcap-2.1.31-2.el6.noarch.rpm rpm - ivh httpd-2*. rpm rpm -ivh httpd-manual-2.*.rpm ●重新启动/停止/启动Apache服务: systemctl restart/stop/start httpd.service 或service httpd restart/stop/start ●查看 Apache服务器的运行状态: systemctl status httpd. service 或service httpd status ●测试 Apache服务器运行状态: 在图形界面打开火狐浏览器输入http://127. 0.0.1呈现测试页(CentOS 用户可以在终端使用lynx 浏览器打开,如没有安装,则使用rpm在光盘中安装lynx 浏览器) 在/var/www/html目录下创建test. html页面,使用vi编辑保存内容,重启apache服务 在火狐浏览器输入http://127. 0. 0.1/test. html查看test. html内容 (2)Apache 服务器的配置 Apache主要配置文件为httpd.conf,存储位置在/etc/httpd/conf目录下 (3)个人Web站点配置 RedHat方式: a:修改配置文件,使用vi编辑器修改主配置文件 /etc/httpd/conf/httpd. conf,修改如下配置,去掉原文中的注释符号 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点.UserDir public. _html//设 置对每个用户的Web站点目录 Allow0verride FileInfo AuthConfig Limit Opt ions MultiViews Indexes SymLinkIfOwnerMatch Inc ludeNoExec Order allow, deny Allow from all Order deny, allow Deny from all 保存文件退出,重启httpd服务 b:用户创建个人Web站点 从root用户身份切换成user1用户(如果没有普通用户,需要先创建普通用户): 在user1主目录下面创建个人站点目录$mkdir public_ html 到/home目录下修改user1目录权限 $chmod 711 user1 进入到public. _html 目录下使用vi创建index. html文件,保存退出重启httpd服务 在浏览器中输入网址http://127.0.0.1/ user1/index. html,查看效果======= CentOS方式: a:修改配置文件,使用vi编辑器修改/etc/httpd/ conf.d/userdir.conf修改成如下配置信息 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点 UserDir public_ html//设置对每个用户的Web站点目录 Allowverride None #修改为 None options None#修改为None Require method GET POST OPTIONS b:用户创建个人Web站点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Francek Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值