【探索Linux】—— 强大的命令行工具 P.31(守护进程)

在这里插入图片描述

阅读导航

  • 引言
  • 一、守护进程简介
    • 1. 概念
    • 2. 特点
  • 二、用C++创建守护进程
    • ⭕代码
    • ✅主要步骤
  • 温馨提示

引言

当谈到计算机系统中运行的特殊进程时,守护进程(daemon)无疑是一个备受关注的话题。作为在后台默默运行并提供各种服务的进程,守护进程在系统运行过程中扮演着不可或缺的角色。与用户交互较少,但却能够持续提供网络服务、日志管理等功能,守护进程的设计目标旨在为整个系统运行提供稳定可靠的支持,而不会打扰用户的正常操作。在本文中,我们将深入探讨守护进程的工作原理、启动机制以及其在计算机系统中的重要性。通过对守护进程的全面了解,我们能够更好地理解其在系统中的作用和意义。

一、守护进程简介

1. 概念

守护进程(daemon)是在计算机系统中在后台运行的一种特殊进程,独立于控制终端并且通常在系统启动时启动。它的主要任务是提供服务、执行特定的任务或者监视其他进程,而不需要用户干预或直接交互。守护进程通常以"d"结尾的名称来命名,比如httpd、sshd等。

守护进程通常处于睡眠状态,等待某些条件发生时被唤醒,并在完成任务后重新进入睡眠状态。它们往往在系统启动时由初始化脚本启动,并在系统关闭时被关闭。

2. 特点

  1. 在后台运行:守护进程在后台默默地执行任务,不会占用用户的控制终端。
  2. 独立于用户:守护进程通常不与任何用户直接交互,而是为系统或其他应用程序提供服务。
  3. 提供特定功能或服务:守护进程通常被设计用来执行特定的任务或者提供特定的服务,比如网络服务、日志管理等。
  4. 稳定可靠:守护进程需要保持稳定可靠地运行,确保系统的正常运行并提供持续的服务。
  5. 无需用户干预:守护进程通常不需要用户干预,能够自主地执行其任务。

二、用C++创建守护进程

⭕代码

#pragma once#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>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/nullint fd = open(nullfile.c_str(), O_RDWR);  // 打开/dev/null设备文件获取文件描述符fdif (fd > 0) {dup2(fd, 0);  // 将标准输入重定向到/dev/nulldup2(fd, 1);  // 将标准输出重定向到/dev/nulldup2(fd, 2);  // 将标准错误重定向到/dev/nullclose(fd);    // 关闭文件描述符fd}
}

✅主要步骤

  1. 忽略异常信号

    • 使用 signal(SIGCLD, SIG_IGN) 忽略子进程状态改变的信号,这样父进程不会再关心子进程的退出状态。
    • 使用 signal(SIGPIPE, SIG_IGN) 忽略管道破裂的信号,防止进程在向一个已经关闭的写端口写入数据时终止。
    • 使用 signal(SIGSTOP, SIG_IGN) 忽略停止信号,防止进程被停止执行。
  2. 创建新的会话

    • 通过 fork() 创建一个子进程,如果成功则父进程退出。
    • 使用 setsid() 将子进程设置为新的会话领导者。这样做的目的是让子进程摆脱原有的终端和会话关联,从而避免受到终端的影响。
  3. 切换工作目录

    • 如果传入了 cwd 参数,即要切换到的工作目录,使用 chdir() 切换当前进程的工作目录到指定的目录。
  4. 重定向输入输出

    • 打开 /dev/null 设备文件,获取其文件描述符 fd
    • 使用 dup2(fd, 0) 将标准输入重定向到 /dev/null,将文件描述符 fd 复制给标准输入文件描述符 0
    • 使用 dup2(fd, 1) 将标准输出重定向到 /dev/null,将文件描述符 fd 复制给标准输出文件描述符 1
    • 使用 dup2(fd, 2) 将标准错误重定向到 /dev/null,将文件描述符 fd 复制给标准错误文件描述符 2
    • 关闭文件描述符 fd

这样,经过以上步骤,当前进程就变成了一个守护进程守护进程独立于终端,不受用户交互的影响,并且将输入输出重定向到 /dev/null,避免产生输出。它可以在后台长时间运行,常用于需要持续提供服务或执行特定任务的场景

温馨提示

感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!
在这里插入图片描述

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

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

相关文章

【产品经理】华为IPD需求管理全思路分享!

作为一名产品经理&#xff0c;会在日常工作中接收到各种需求&#xff0c;而解决需求要提供对应的解决方案。本篇文章以华为的IPD需求管理流程为例&#xff0c;探讨其需求管理思路&#xff0c;帮助产品岗位的你快速做好需求管理并解决方案。 一、理清什么是产品需求 说到这个话…

Matlab|电动汽车充放电V2G模型

目录 1 主要内容 1.1 模型背景 1.2 目标函数 1.3 约束条件 2 部分代码 3 效果图 4 下载链接 1 主要内容 本程序主要建立电动汽车充放电V2G模型&#xff0c;采用粒子群算法&#xff0c;在保证电动汽车用户出行需求的前提下&#xff0c;为了使工作区域电动汽车尽可能多的消…

httpx+nuclei实战 | 大华智慧园区综合管理平台任意密码读取漏洞

漏洞成因 没有对接口进行严格的权限管理&#xff0c;导致可以通过访问user_getUserInfoByUserName.action获取system用户的MD5加密后的密码 hunter语法 web.icon"4644f2d45601037b8423d45e13194c93"&&web.title"智慧园区综合管理平台" POC GET…

【计算机择校】“西电“和“西交“那个更好?

那肯定还是建议去西交&#xff0c;两个学校还是有一定差距的&#xff0c;985高校的资源不容小觑... 本人双非科班出身备考408成功上岸&#xff0c;在这里也想给想考408的学弟学妹们一些很中肯的&#xff0c;学习建议。 我是科班水过408的四门课 说实话&#xff0c;大部分准备…

总结TCP各类知识点

前言 本篇博客博主将详细地介绍TCP有关知识点&#xff0c;坐好板凳发车啦~ 一.TCP特点 1.有连接 TCP传输的过程中类似于打电话的各个过程 2.可靠传输 通过TCP自身的多种机制来保证可靠传输 3.面向字节流 内容是以字节的方式来进行发送与接收 4.缓冲区 TCP有接收缓冲区…

什么是CSS?

一.CSS&#xff08;层叠样式表&#xff09;&#xff1a;是一种用于描述网页内容任何呈现的样式的语言&#xff0c;它和html&#xff08;超文本标记语言&#xff09;一起用于创建网页和Wed应用程序。 W3C标准&#xff1a;网页主要由三部分组成 结构&#xff1a;html 表现&#x…

python爬虫基础-----运算符(第三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

Candance小白画反相器

1.先建文件夹learn_fxq 2. learn_fxq右键open in Terminal 3. 创建一个新的library 4. 5. file new cellview&#xff0c;要想新建一个反相器电路&#xff0c;这里的type一定要选择schematic&#xff0c;这个代表是电路原理图&#xff0c;需要的就是电路原理图&#xff0c;点击…

电子特气吸收瓶PFA洗气瓶串联反应瓶

定制各式各样PFA洗气瓶&#xff0c;洗涤瓶&#xff0c;反应瓶&#xff0c;多级串联反应装置。 产品特性 1、外观透明方便观察&#xff1b; 2、耐高底温&#xff1a;使用温度-200℃&#xff5e;260℃&#xff1b; 3、耐腐蚀&#xff1a;耐强酸、强碱、王水、氢氟酸和各种有机…

一文读懂「数据分级分类新国标」,美创数据安全分类分级平台助力高效落地!

数据分类分级国标重磅发布&#xff01; 美创数据安全分类分级平台助力高效落地 ✓ 基于新国标数据分类分级规则框架方法&#xff0c;美创数据安全分类分级平台满足标准要求&#xff0c;融合人工智能技术助力高效实践落地。 ✓ 数据安全分类分级平台全面支持重要数据、个人信息…

Redis与数据库的一致性

Redis与数据库的数据一致性 在使用Redis作为应用缓存来提高数据的读性能时&#xff0c;经常会遇到Redis与数据库的数据一致性问题。简单来说&#xff0c;就是同一份数据同时存在于Redis和数据库&#xff0c;如何在数据更新的时候&#xff0c;保证两边数据的一致性。首先&#…

Linux课程____selinux模式

一、是什么 它叫做“安全增强型 Linux&#xff08;Security-Enhanced Linux&#xff09;”&#xff0c;简称 SELinux&#xff0c;它是 Linux 的一个安全子系统 二、有啥用 就是最大限度地减小系统中服务进程可访问的资源&#xff08;根据的是最小权限原则&#xff09;。避免…