守护进程和后台进程的理解

关于守护进程和后台进程, 一直以为是一个东西。然而并不是。

概念

先看下 chatGPT上对二者的描述:在这里插入图片描述
在这里插入图片描述

如何创建守护进程

通常情况下,守护进程的父进程是init进程(PID为1)。在类Unix系统中,init进程是系统引导过程的第一个进程,是所有其他进程的祖先进程。当一个守护进程启动时,它会创建一个子进程并终止自己,使得子进程成为新的守护进程。这样的设计是为了确保守护进程不会成为孤儿进程(没有父进程),并且能够继续在系统中运行。由于init进程是系统中的根进程,它会接收并处理孤儿进程。当守护进程的父进程终止时(通常是init进程接收到子进程的终止信号),init进程会接管并处理守护进程的状态和资源释放。因此,init进程通常是守护进程的父进程,负责维护和管理守护进程的生命周期。

代码示例:

	/* Daemonizing */pid = fork();if (pid < 0) {DEBUG_MSG("fork error");exit(1);}else if (pid > 0) {DEBUG_MSG("parent exits");exit(0);}/* Process Independency */if (setsid() < 0) {DEBUG_MSG("setsid error");exit(1);}/* Fork again, daemon process is re-parented to init(PID 1) */pid = fork();if (pid < 0) {DEBUG_MSG("fork error");exit(1);}else if (pid > 0) {DEBUG_MSG("parent exits");exit(0);}

这段代码展示了创建守护进程的过程。工作原理如下:

1.pid = fork();:通过调用fork()函数创建一个子进程。子进程的pid为0,父进程的pid为子进程的进程ID。

2.检查pid的值,如果pid小于0,则表示fork()调用失败,输出错误消息并退出程序。

3.如果pid大于0,说明当前代码在父进程中执行。父进程通过输出调试消息表明自己正在退出,并调用exit(0)来正常终止进程。

4.setsid():子进程调用setsid()函数创建一个新的会话,并成为该会话的首进程。这使得子进程独立于其父进程和终端会话。

5.检查setsid()的返回值,如果小于0,则表示出现错误,输出错误消息并退出程序。

6.pid = fork();:子进程再次调用fork()函数创建一个新的子进程。这样做是为了确保守护进程不会成为会话首进程(因为会话首进程无法终止)。

7.检查pid的值,如果pid小于0,则表示fork()调用失败,输出错误消息并退出程序。

8.如果pid大于0,说明当前代码在第二次fork后的子进程中执行。子进程通过输出调试消息表明自己正在退出,并调用exit(0)来正常终止进程。

最终,执行这段代码的进程将会变成一个守护进程。这个守护进程与终端会话分离,成为一个独立的进程,并且它的父进程是init进程(PID为1)。

会话、终端、进程之间的关系

会话(Session)、终端(Terminal)和进程(Process)之间有以下关系:

  1. 会话:会话是一个抽象的概念,代表一个用户与系统进行交互的时间段。它可以包含多个终端会话和相关联的进程。一个会话通常从用户登录开始,直到用户注销或系统关闭。每个会话都有一个唯一的会话ID(Session ID)。
  2. 终端:终端是用户与计算机系统进行交互的设备或应用程序。在传统的计算机系统中,终端通常是指物理终端设备,如计算机控制台、终端机或虚拟终端。在现代的操作系统中,终端也可以是指终端仿真器(Terminal Emulator)软件,如命令行终端、终端窗口或终端模拟器。一个终端可以关联一个会话。
  3. 进程:进程是正在执行的程序的实例。它是操作系统中进行资源分配和管理的基本单位。每个进程都有一个唯一的进程ID(Process ID),用于标识和管理进程。一个进程可以关联一个终端会话。

关系描述:

  • 一个会话可以包含多个终端会话。例如,用户在登录后可能同时在多个终端上进行交互,这些终端会话都属于同一个会话。
  • 一个终端会话通常关联一个终端设备或终端仿真器,它是用户与系统进行交互的接口。
  • 一个终端会话可以关联一个或多个进程。这些进程可以是用户启动的应用程序、命令行工具或其他进程。
  • 一个进程可以属于一个终端会话,从而与一个终端关联。这意味着进程可以通过关联的终端接收输入和发送输出。
    总结来说,会话是用户与系统交互的时间段,终端是用户与系统交互的接口,而进程是正在执行的程序实例,可以与终端会话关联起来以接收输入和发送输出。

为什么要这样创建守护进程

守护进程的设计目标是在后台长期运行,独立于任何终端会话。

守护进程通常不会成为会话的首进程。当一个进程成为会话的首进程时,它会自动拥有控制终端。这意味着它能够接收来自终端的输入和发送输出到终端。但对于守护进程来说,与终端相关的交互是不必要的,而且可能会引起一些问题,例如无法完全脱离终端,或者因为接收到来自终端的信号而终止运行。

为了确保守护进程的独立性和稳定性,常见的做法是采用以下步骤:

1.调用setsid()函数:它会创建一个新的会话并使调用进程成为该会话的首进程。这样,守护进程就不再与原始终端会话相关联。
2. 第二次调用fork():通过再次调用fork(),创建一个新的子进程。这样做是为了确保守护进程不会成为会话的首进程,因为会话首进程无法终止。

通过这种方式,守护进程将成为新会话的成员,但不会成为会话的首进程。它将与终端完全分离,不再受终端会话的影响。这有助于确保守护进程能够在后台长期运行,并且不会因为与终端相关的问题而受到干扰。

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

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

相关文章

chatgpt赋能python:Python拦截手机短信——探索安全应用的新契机

Python拦截手机短信——探索安全应用的新契机 短信成为了我们日常生活中不可或缺的通信手段之一。但是&#xff0c;你是否曾想过&#xff0c;自己的短信是否安全&#xff1f;有没有人会窃取你的短信内容&#xff1f;Python提供了一种新的安全保障方法&#xff0c;就是拦截手机…

php限制访问次数,api接口限流(限制请求次数)

有时候我们需要给我们写的接口来定义请求限制次数(限流) 如多长时间之内只能请求多少次。这样可以防止某些恶意用户一直请求我们的接口 给服务器减轻压力。 应用场景&#xff1a;app端 用户收藏文章 取消收藏文章(某些恶意用户一直在app端重复点击收藏或取消收藏 这样对我们的数…

ChatGPT冷观察:没有大模型的土壤,开不出ChatBot的花

文|智能相对论 作者|叶远风 谁在跟风&#xff0c;谁又有真本事能做出中国版的对标产品来&#xff1f; 这恐怕是ChatGPT这股热潮以来&#xff0c;关心中国AI发展的业界人士最想问的问题。 或者说&#xff0c;在中国人工智能不落后于全世界的当下&#xff0c;业界也在普遍渴望一个…

钉钉PC端聊天中分享的网址生成卡片

前言 卡片化可以方便用户更加简单直接的获取到你网页当中的内容&#xff0c;吸引用户点击进去查看更详细的信息 实现 方式一&#xff1a; 通过设置页面的<meta>标签去获取&#xff1a; <head><meta charset"UTF-8"><meta name"viewpo…

钉钉创建群机器人

1、在对应群&#xff0c;点击右上角设置按钮&#xff1a; 2、点击群智能助手&#xff1a; 3、点击 添加机器人&#xff1a; 4、选择添加 自定义机器人&#xff1a; 5、点击 添加&#xff1a; 6、根据实际情况 选择设置类型&#xff1a; 7、复制得到对应的token值&a…

钉钉群机器人接入

内容摘要 1.简单接入群机器人&#xff0c;主要用于在群里发送通知信息 2.官方API文档&#xff1a;什么是机器人 - 钉钉开放平台 1.创建一个钉钉群&#xff0c;按照下面步骤添加自定义机器人&#xff0c;设置时选择“加签”&#xff0c;创建好之后会得到机器人的webhook 2.机…

钉钉机器人发送卡片消息

1.打开钉钉开放平台&#xff1a;https://open.dingtalk.com/ 2.登陆&#xff08;需要管理员身份&#xff09; 3.开发者后台——创建应用内机器人 4.获得AppKey和AppSecret&#xff0c;用于获取access_token 具体操作官方文档&#xff1a;https://open.dingtalk.com/document/o…

钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知

文章导航 钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用 钉钉小程序生态2—区分小程序和H5微应用 钉钉小程序生态3—钉钉扫码登录PC端网站 钉钉小程序生态4—钉钉小程序三方企业应用事件与回调 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知 前…

工具使用之——钉钉添加自定义机器人

一 概述 钉钉有自定义机器人功能&#xff0c;开发者可以选择机器人类型(心知天气、代码托管平台&#xff0c;JIRA等)&#xff0c;也可以自定义通过Webhook接入自定义服务的机器人&#xff0c;本篇文章介绍的就是通过Webhook发送通知的机器人 二 添加机器人 点击左侧上方的用户…

利用钉钉接口往钉钉群推送信息

利用钉钉接口往钉钉群推送信息 如下图所示,往钉钉群推送关键信息 创建钉钉群 在群设置中选择智能群助手 选择添加机器人 选择自定义,通过Webhook接入自定义服务

钉钉里的钉一下怎么用 怎么使用钉钉里的钉一下

钉钉是很多公司比较依赖的办公工具&#xff0c;每天上班都要先打开钉钉。我们和同事交流工作内容的时候&#xff0c;主要也是通过钉钉。如果同事消息太多&#xff0c;或者有其他事情耽误了&#xff0c;就可能没有及时查看我们的消息。看着我们发送的消息久久都是“未读”状态&a…

钉钉群机器人消息通知

最近项目需要授权&#xff0c;需要及时通知授权失败的工单&#xff0c;所以就用到了钉钉机器人在群里实时通知&#xff0c;然后就写下了这篇文章。如果放到服务器出现域名错误修改hosts文件,在服务器执行vi /etc/hosts可直接修改&#xff0c;在文件中添加106.11.35.100 oapi.di…

自定义钉钉群机器人

文章目录 一.需求说明二.使用步骤1.打开钉钉&#xff0c;进入一个需要创建机器人的群。并点击群设置2.点击只能群助手&#xff0c;添加机器人3.输入自定义机器人相关信息4.点击确定&#xff0c;保存好webhook5.发送测试 三.官方相关文档 一.需求说明 在做项目的过程中&#xf…

文心源远流长久,百度千帆造万千

摘要 本文介绍了百度文心大模型作为产业级知识增强大模型的特点和应用。文心大模型是百度公司推出的一种技术领先的大型人工智能模型&#xff0c;旨在为千行百业的AI开发提供强大的基座。该模型具有全场景覆盖、技术领先、零门槛使用以及真实可落地的特点。它包括通用的基础大模…

mysql学习之数据系统概述

☀️马上要成为打工人&#xff0c;这几天把前面的知识都捡了捡&#xff0c;发现自己对关系数据库这块的学习还有所缺失&#xff0c;于是本章开始学习mysql 这里写目录标题 1. 数据库系统的发展1.1 人工管理阶段1.2 文件系统阶段1.3 数据库阶段1.4 大数据阶段 2 数据库系统的组…

GPT提示词系统学习-第三课-规范化提示让样本走在提示词前

开篇 本教程将为您提供有关不同类型提示的术语及如何描述它们。尽管提示工程中已经有一些方法来形式化术语,但这个领域仍在不断发展,我们在这篇教程中将给到大家展示一种基于QA形式的通用的、标准的提示语写法。 提示的组成部分 以下是在一个提示中经常会出现的一些组成部…

2023最新软件测试八股文,能不能拿心仪Offer就看你背得怎样了

前言 鉴于目前测试就业越来越严峻&#xff0c;内卷也成了测试领域的代名词了。 所以现在还想从事软件测试行业的小伙伴们&#xff0c;想要心仪的工作&#xff0c;要多努力学习哟。小编给大家整理了2023最新软件测试八股文&#xff0c;大家刷起来哟 1.软件测试基础题&#xff…

【软件测试】8年资深测试说出来我们的心声......

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 执着于手动的功能…

软件测试面试八股文有必要背吗?看完这份101问真的贼香

前言 2022秋招过半&#xff0c;很多同学会问软件测试面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试的…

Qt-数据库开发-用户登录、后台管理用户

Qt-数据库开发-用户登录、后台管理用户 [1] Qt-数据库开发-用户登录、后台管理用户1、概述2、实现效果 [2] Qt使用SqlLite实现权限管理初始化数据库创建数据表插入数据可使用结构体对数据信息进行封装数据库查询函数为数据库更新数据函数为删除数据函数为 [3] 测试效果[4] sqli…