【Linux】Daemon守护进程详解

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥Linux系列专栏:Linux基础 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述


目录

  • 一、孤儿进程
  • 二、守护进程
    • 如何建立新会话?
  • 守护进程的创建

一、孤儿进程

孤儿进程是父进程结束后,自己仍继续运行的进程。孤儿进程会被1号进程(init进程)收养。

每当出现一个孤儿进程的时候,内核就把孤儿的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。

二、守护进程

守护进程是一种在后台持续运行的特殊进程。守护进程一般不与用户直接交互,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

守护进程是一种特殊的孤儿进程。

守护进程丢弃了原有的控制终端,因此需要创建新会话以脱离控制终端。

会话是多个进程组的集合。

如何建立新会话?

建立新会话时,先调用fork(),父进程终止,子进程调用setsid()函数

创建会话函数:
以自己的ID设置进程组ID,同时也是新会话的ID

pid_t setsid(void)

返回值:

  • 成功返回进程的会话id
  • 失败返回-1

获取当前进程的会话id:

pid_t getsid(pid_t pid);

返回值:

  • 成功返回进程的会话id
  • 失败返回-1

守护进程的创建

  • 1.父进程调用fork()函数创建子进程,终止父进程,让其子进程成为孤儿进程
  • 2.子进程调用setsid()函数创建一个新会话,脱离终端
  • 3.改变工作目录位置为根目录,防止目录被卸载
  • 4.重新设置文件的权限掩码,umask = 0002
  • 5.关闭或重定向文件描述符(STDIN_FILENO和STDOUT_FILENO),让错误信息等不打印在前台
  • 6.循环执行业务

创建守护进程代码示例:

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>void daemon_create()
{pid_t pid;pid = fork();if(pid > 0){exit(0);	//父进程退出}else if(pid == 0){int errfd;setsid();	//创建新会话errfd = open("error.log",O_RDWR|O_CREAT,0664);close(STDIN_FILENO);		//关闭输入输出描述符close(STDOUT_FILENO);dup2(errfd,STDERR_FILENO);//描述符重定向umask(0002);	//修改权限掩码chdir("./");	//工作路径改为根目录while(1){//do something...}}else{perror("fork call failed\n");}
}
int main()
{daemon_create();return 0;
}

守护进程的特点:

  • 守护进程脱离于终端并且在后台运行,不会在终端上打印运行信息,终端关闭也会运行
  • 生命周期长,占用资源少,能够持续运行完成任务,广泛应用于各种服务器

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DRV8313和L298N都是电机驱动,一个是驱动三相FOC无刷直流电机的,一个是驱动有刷电机,使stm32控制无刷电机简单入门知识

DRV8313和L298N都是电机驱动器&#xff0c;但它们之间存在一些关键的区别&#xff1a; DRV83131&#xff1a; 由德州仪器&#xff08;TI&#xff09;制造。 具有集成的场效应晶体管&#xff08;FET&#xff09;。 最大电压为65V。 峰值电流为3A。 适用于三相电机驱动。 L298N…

性能测试常用术语

之前在性能测试过程中&#xff0c;对于某些其中的术语一知半解&#xff0c;导致踩了很多坑。这篇博客&#xff0c;就常见的一些性能测试术语进行一次浅析。。。 负载 对被测系统不断施加压力&#xff0c;直到性能指标超过预期或某项资源使用达到饱和&#xff0c;以验证系统的处…

基于FPGA的OFDM基带发射机的设计与实现

文章目录 前言一、OFDM描述二、本系统的实现参照 1.IEEE 802.11a协议主要参数2.不同调制方式与速率 3. IFFT映射关系4. IEEE 802.11a物理层规范5. PPDU帧格式三、设计与实现 1.扰码2.卷积编码与删余3.数据交织4.符号调制5.导频插入6.IFFT变换 7.循环前缀&加窗8.训练序列生成…

kubekey网页版安装k8s集群操作流程

kubekey可以一键拉起k8s集群并完成kubesphere的部署&#xff0c;以后kubekey简称kk。kk 3.2版本以前都是在宿主机上完成对应的创建集群、添加节点、升级等操作的&#xff0c;3.2版本后开始往页面操作的方向演进&#xff0c;kk 3.2版本现在还是alpha&#xff0c;所以不推荐在生产…

java面向对象基础(面试)

一、面向对象基础 1. 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法&#xff0c;通过一个个方法的执行解决问题。面向对象会先抽象出对象&#xff0c;然后用对象执行方法的方式解决问题。 2.创建一个对象用什么运算符?对象实体与对象引用有何不同? n…

[C++]继承(续)

一、基类和派生类对象赋值转换 在public继承时&#xff0c;父类和子类是一个“is - a”的关系。 子类对象赋值给父类对象/父类指针/父类引用&#xff0c;我们认为是天然的&#xff0c;中间不产生临时对象&#xff0c;也叫作父子类赋值兼容规则&#xff08;切割/切片&#xff…

如何本地搭建Emby影音管理服务并结合内网穿透实现远程访问本地影音库

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…

江科大stm32学习笔记9——OLED调试工具

一、OLED OLED&#xff1a;有机发光二极管&#xff0c;供电3~5.5V&#xff0c;0.96寸OLED通信协议&#xff1a;I2C/SPI&#xff0c;分辨率&#xff1a;128*64 二、调试方式 串口调试&#xff1a;通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手…

JS逆向实战28——补环境过RS6

前言 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01;此外出于某种原因。本章大…

探究HMAC算法:消息认证与数据完整性的完美结合

Hash-based Message Authentication Code&#xff08;基于哈希的消息认证码&#xff0c;简称HMAC&#xff09;算法作为一种广泛应用的消息认证码&#xff08;MAC&#xff09;算法&#xff0c;在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…

揭开时间序列的神秘面纱:特征工程的力量

目录 写在开头1. 什么是特征工程?1.1 特征工程的定义和基本概念1.2 特征工程在传统机器学习中的应用1.3 时间序列领域中特征工程的独特挑战和需求3. 时间序列数据的特征工程技术2.1 数据清洗和预处理2.1.1 缺失值处理2.1.2 异常值检测与处理2.2 时间特征的提取2.2.1 时间戳解析…

LeetCode: 189.轮转数组

本篇目标了解&#xff0c;翻转数组的经典解法&#xff0c; 189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 目录 基本方法概述&#xff1a; 1&#xff0c;翻转做法&#xff0c;推荐时O&#xff08;n&#xff09;&#xff0c;空&#xff08;1&#xff09; 2&#x…