嵌入式操作系统实验-守护进程

一、实验目的

1、了解守护进程的生命周期及应用。
2、掌握编写守护进程的五个基本步骤。

二、实验内容

1、编写守护进程test,test每5秒钟打印一个数字,定向输出到trush.txt。
2、编写并编译monitor.c,其功能为每5秒检测一次test是否正在运行;若未运行,则运行该程序。
3、先验证test是否能正常运行,需要执行test,然后用命令查看数字是否正常输出至trush.txt。
4、然后执行kill命令终止进程,使用命令查看test此时并未运行。
5、执行monitor,5秒钟后使用命令查看test此时已经运行。
选做部分:将编写的守护进程设置为开机自启动。

三、实验源程序及结果截图

test.sh

i=1
while (true)
do
echo $i>>/home/zhang/experiment/experiment_3/trush.txt
i=$(($i+1))
sleep 1
done

monitor.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <syslog.h>
#include <sys/stat.h>
pid_t process() {
    pid_t pr;
    pr = fork();
    if (pr == 0) {
        system("/home/zhang/experiment/experiment_3/test.sh");   // 按文件名查找文件
    }
    return pr;
}
int main() {
    pid_t pc;       // 守护进程
    pid_t pr;       // 临时变量: 返回值
    pid_t pd;       // 被守护进程
    pc = fork();
    if (pc < 0) {
        printf("Error fork!\n");
    } else if (pc > 0) {    // 父进程
        sleep(2);
        exit(0);
    } else if (pc == 0) {  // 子进程
        setsid();
        chdir("/");
        umask(0);
        for (int i = 0; i < getdtablesize(); ++i) {
            close(i);
        }
        pd = process();
        do {
            do {
                pr = waitpid(pd, NULL, WNOHANG);
                if (!pr) {
                    sleep(5);
                }
            } while (pr == 0);
            pd = process();
        } while (1);
        exit(0);
    }
}

设置守护进程开机自启动

cd /home/zhang/experiment/experiment_3
vim me.sh

添加内容

/home/zhang/experiment/experiment_3/monitor

sudo vim /etc/profile

在文件末尾添加

sh /home/zhang/experiment/experiment_3/me.sh

四、实验截图

编译monitor
在这里插入图片描述

后台运行test.sh,并把生成的值写入trush.txt
在这里插入图片描述

杀死test.sh并查看确认被杀死
在这里插入图片描述

运行monitor.c,并检索sh进程
在这里插入图片描述

杀死进程test
在这里插入图片描述

一会儿后test再度被启动
在这里插入图片描述

杀死monitor
在这里插入图片描述

再杀死test
在这里插入图片描述

此时的test不会在被激活
在这里插入图片描述

五、实验问题总结

/etc/profile:这个文件是每个用户登录时都会运行的环境变量设置,所以将monitor的启动脚本写在这里可以开机自启动monitor,从而启动test.sh

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值