吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1090|回复: 0
收起左侧

[讨论] Daemon Process

[复制链接]
古月不傲 发表于 2020-12-23 20:31
本帖最后由 古月不傲 于 2020-12-23 20:43 编辑

守护进程

什么是守护进程?

运行于后台,没有关联终端的进程

基本特点
  • 一般生存周期较长,与操作系统共存亡
  • 无终端,所以终端关闭,也不会消亡

linux中存在很多的守护进程,维护系统的日常开销

  • 相关概念
    • 大多数守护进程都是以root用户特权运行
    • 守护进程没有终端,所以TTY显示?
    • 带有[]的属于内核守护进程,无控制终端方式启动,也就是说随操作系统启动
    • 不带[]的属于用户守护进程
守护进程编写规则
  • fork一个子进程,然后父进程退出(固定套路)
  • 子进程调用setsid创建新会话,脱离TTY
  • 调用umask(0),生成文件的所有权限
  • 重定向STDIN_FILENO、STDOUT_FILENO,到/dev/null
文件描述符的一些概念

类似于windows的句柄,返回一个正数
三个特殊的文件描述符
0: 标准输入[键盘],STDIN_FILENO
1: 标准输出[屏幕],STDOUT_FILENO
2: 标准错误[屏幕],STDERR_FILENO        

/dev/null(黑洞) 空设备,负责吞噬一切无关信息

// 重定向标准输入输出到黑洞
int fd;

fd = open("/dev/null", O_RDWR);
dup2(fd, STDIN);
dup2(fd, STDOUT);
if (fd > STDERR) {
        close(fd);
}
守护进程不会收到的内核信号
  • SIGHUP                连接断开
  • SIGINT                 ctrl + c
  • SIGWINCH        窗口大小发生变化        
守护进程和后台进程的区别
  • 守护进程没有关联终端,而后台进程关联了终端
测试
#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>

int create_daemon() 
{
        int fd;

        switch (fd = fork()) {
                case -1: 
                        return -1;
                case 0:
                        break;
                case 1:
                        close(fd);
                        exit(0);
        }
        if (setsid() == -1) {
                return -1;
        }

        umask(0);

        fd = open("/dev/null", O_RDWR);
        if (fd == -1) {
                return -1;
        }
        if (dup2(fd, STDIN_FILENO) == -1) {
                return -1;
        }
        if (dup2(fd, STDOUT_FILENO) == -1) {
                return -1;
        }
        if (fd > STDERR_FILENO) {
                close(fd);
        }
        return 0;
}

int main(void)
{
        if (create_daemon() != 0) {
                return -1;
        }
        while (1) {
                printf("Hello Wolrd!\n");
        }

        return 0;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-16 15:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表