【网络】守护进程


一、前后台进程介绍(linux进程间的关系)

1、前台进程

在这里插入图片描述
什么叫做前台?什么叫做后台?
不论前台还是后台都能向显示器打印,谁拥有键盘文件,谁就是前台!键盘只有一个所以就只有一个前台。

2、后台进程(fg,bg,jobs使用)

在这里插入图片描述

3、任务和进程组的关系

在这里插入图片描述
属于同一个会话(用谁的xshell去访问使用)任务是前后台都有的任务,琴台任务只有一个,后台任务有多个,任务分发给进程组,进程组可以自称一组也可以几个进程一起合并成为一组。

(1)登录

我张三登录以后,系统会以bash这个任务的ID为命名构建一个会话,这些进程组和任务都会放在一个会话中!

(2)退出

在这里插入图片描述
我们不想受到任何用户的登录和注销的影响的话就要守护进程化。

注销:把会话全部删掉,所以守护进程怎么做?
在这里插入图片描述

二、守护进程

在这里插入图片描述
步骤:忽略异常信号->将自己设置为独立session->更改文件的目录->将标准输入标准输出标准错误重定向到/dev/null这个垃圾桶文件中。

#pragma once 

#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <string>

const std::string nullfile = "/dev/null";

void _Daemon(const std::string& cwd = “”)
{
    // 1.忽略其他信号
    signal(SIGCLD, SIG_IGN);
    signal(SIGPIPE, SIG_IGN);
    signal(SIGSTOP, SIG_IGN);
    // 2.将自己设置为独立会话
    if (fork() > 0) exit(0); // 父进程直接退出
    setsid();
    // 3.更改文件的目录
    if (!cwd.empty()) chdir(cwd.c_str());
    // 4.将标准输入标准输出标准错误重定向到/dev/null这个垃圾桶文件中
    int fd = open(nullfile.c_str(), O_RDWR);
    if (fd > 0)
    {
        // 重定向
        dup2(fd, 0); 
        dup2(fd, 1);
        dup2(fd, 2);
        close(fd);
    }
}
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

2022horse

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

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

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

打赏作者

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

抵扣说明:

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

余额充值