03守护进程学习之创建守护进程的代码例子

03守护进程学习之创建守护进程的代码例子

与守护进程相关的文章:
01守护进程学习之会话的概念和创建会话(包含Linux下相应id的总结一览)
02守护进程学习之创建守护进程的七步骤及其分析
03守护进程学习之创建守护进程的代码例子

1 守护进程的例子

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

void mydaemond(void){
	
	//1 创建子进程,父进程退出
    pid_t pid = fork();
    if (pid > 0) {
        exit(0);
    }

	//2 在子进程中创建新会话
    setsid();

	//3 改变当前工作目录
    int ret = chdir("/home/itcast/");
    if (ret == -1) {
        perror("chdir error");  // chdir error no such diractroy or file
        exit(1);
    }
	
	//4 重设文件权限掩码
    umask(0022);

	//5 关闭文件描述符
    close(STDIN_FILENO);
    open("/dev/null", O_RDWR);
    dup2(0, STDOUT_FILENO);
    dup2(0, STDERR_FILENO);
}

int main(void){
	
    mydaemond();
	
	//6 开始执行守护进程核心工作
    while (1) {
    }

	//7 守护进程退出处理程序模型(实际上对于守护进程的管理或者退出都是使用脚本语言来管理的,一般不需要在代码中处理。)
    return 0;
}

以上例子步骤不是太熟的话可以看我上一篇的七步骤。

2 结果分析
1)执行完没有结果说明正确,如下图。
在这里插入图片描述
2)使用ps ajx(建议)或者平时aux查看,可以知道它正在运行并且脱离了终端(有问号嘛),最明显的标志就是:我们在程序中使用了while,但是终端并没有卡主而且我们还能输入了ps ajx命令,说明它确实脱离了终端控制。
在这里插入图片描述
3)不受用户注销的影响
在这里插入图片描述
注销后重新登录用户输入ps ajx命令查看:
在这里插入图片描述
可以看到仍然在后台运行,并且已经执行7分多钟,因为我去刷牙了,一giao我里giaogiao。

4)由于它是多余的,所以根据上面的pid把它给干掉。
在这里插入图片描述
5)可以看到没有在在找到该守护进程了,注意下面的红色的那行是由于grep命令造成的,并不是该守护进程,具体你可以使用ps ajx去掉grep命令去一个个看,确实是没有该守护进程的,只不过麻烦了点。
在这里插入图片描述

好了,守护进程的学习就是这三篇,到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值