Linux--守护进程与会话

news2024/12/23 1:20:49

进程组

概念

进程组就是一个或多个进程的集合
一个进程组可以包含多个进程。

下面我们通过一句简单的命令行来展示:
在这里插入图片描述

为什么会有进程组?

  • 批量操作:进程组允许将多个进程组织在一起,形成一个逻辑上的整体。当需要对多个进程执行相同的操作时,可以通过进程组进行操作实现,不用对每一个进程执行相同的操作,这样大大提高执行效率。
  • 任务控制:在Linux操作系统中,进程组与作业控制紧密联系。用户可以通过作业控制指令来管理进程组中的进程,从而实现任务的启动、暂停、恢复、停止等功能。
  • 功能联系:进程组中的进程通常在功能上都有相近的联系,它们协同工作完成特定任务。通过进程组可以快速的管理和这些具有共同目标的进程。

如果只有一个进程,是否有进程组?

在这里插入图片描述

组长进程

每一个进程组都有一个组长进程,这个进程的PID与进程组ID一样

  • 作用:进程组组长可以创建一个进程组
  • 生命周期:从进程组创建存在到其中一个最后进程离开为止。

会话

概念

由多个进程组组成的集合,称为会话(session ID)
它提供了一个运行环境和资源共享的上下文,包含了一组相关的进程,这些进程具有共同的会话标识符(SID)。
像我们通过Xshell打开的一个会话页面,就是一个会话。

我们可以通过命令查看已打开的会话:

ls /dev/pts/ 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

setsid()

setsid() 函数在 Unix 和类 Unix 系统中用于创建一个新的会话(session),并使调用该函数的进程成为新会话的领头进程(session leader)。这通常与创建守护进程(daemon processes)相关,因为守护进程需要独立于任何控制终端运行。

但setsid()被执行时:

  • 创建新的会话:如果调用 setsid() 的进程不是进程组的领头进程,则该函数会创建一个新的会话,并使调用进程成为该会话的领头进程。新会话的会话ID(SID)是该进程的PID。
  • 使调用进程脱离控制终端:如果调用 setsid() 的进程之前有一个控制终端,那么调用之后,该进程将不再具有控制终端。这意味着该进程不再是任何终端进程组的成员,也不再与任何终端相关联。
  • 使调用进程成为新进程组的领头进程:调用 setsid() 会导致调用进程成为一个新进程组的领头进程,该进程组的ID也是该进程的PID。

注意
如果这个进程是进程组的组长,那么将会创建会话失败;为了避免这种情况,可以在子进程里面执行该语句,同时让父进程终止;这样子进程会形成一个孤儿进程,进程ID一定是新分配的,就不会出现错误的情况了。

作业控制

作业是针对用户来讲,用户完成某项任务而启动的进程,一个作业既可以只包含一个进程,也可以包含多个进程,进程之间互相协作完成任务, 通常是一个进程管道。

Shell 分前后台来控制的不是进程而是作业 或者进程组。一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成,Shell 可以同时运⾏一个前台作业和任意多个后台作业,这称为作业控制

例如:
在这里插入图片描述
在这里插入图片描述

守护进程

在一个会话中,会有一个进程是用来创建对应的会话,这个进程与会话对应的,这个进程被称为守护进程
守护进程(Daemon Process)或称为服务进程,是在Unix、Linux及类Unix操作系统中运行的一种特殊类型的后台进程。守护进程独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程通常在系统启动时由系统初始化脚本启动,并在系统关闭时关闭。它们没有控制终端,因此它们不能接收来自终端的输入,也不能在终端上显示输出。

主要特点

  • 在后台运行:守护进程在后台运行,不占用任何终端。
  • 独立于终端:守护进程与启动它的终端无关,即使启动它的终端被关闭,守护进程仍然运行。
  • 周期性地执行某些任务:守护进程可以定期执行特定的任务,如检查系统状态、备份数据等。
  • 响应系统事件:守护进程也可以监听系统事件,并在事件发生时执行相应的操作。

代码演示如何创建一个会话

Deamon.hpp

#pragma once

#include <iostream>
#include <cstdlib>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

const char *root = "/";             // 路径
const char *dev_null = "/dev/null"; // 重定向到哪里

void Deamon(bool ischdir, bool isclose)
{
    // 1. 忽略可能引起程序异常退出的信号
    signal(SIGCHLD, SIG_IGN); // 忽略到子进程创建的信号
    signal(SIGPIPE, SIG_IGN); // 忽略到管道信号

    // 2.创建子进程,关闭父进程
    if (fork() > 0)
        exit(0);

    // 设置让自己成为一个新的会话, 后面的代码其实是子进程在走
    setsid();

    // 是否改变会话路径
    if (ischdir)
        chdir(root);

    //成为守护进程,将对应的标准流进行关闭,表示到后台运行了
    if (isclose)
    {
        close(0);
        close(1);
        close(2);
    }
    else//这里表示重新向到指定目录下
    {
        // 这里一般建议就用这种
        int fd = open(dev_null, O_RDWR);
        if (fd > 0)
        {
            dup2(fd, 0);
            dup2(fd, 1);
            dup2(fd, 2);
            close(fd);
        }
    }
}

main.cc

#include "Deamon.hpp"

int main()
{
    Deamon(true,false);
    while(true)
    {
        sleep(1);
    }

    return 0;
}

在这里插入图片描述

将服务器守护进程化

链接:Socket编程TCP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js 3个事件监听器 EventListeners

起因&#xff0c; 目的: 我有2个显示器。 某视频网站&#xff0c;我想一边播放视频&#xff0c;一边搞其他。但是&#xff0c;当我把鼠标移动到浏览器外面&#xff0c;点击一下别处&#xff0c; 视频就会自动暂停. 这个叫做 事件监听&#xff01; blur, 在元素或窗口失去焦点…

I/O流(Java)

目录 1. IO概述 1.1 什么是IO 1.2 IO的分类 1.3 IO的流向说明图解 1.4 顶级父类 2. File类 2.1 概述 2.2 构造方法 2.3 常用方法 2.3.1 获取功能的方法 2.3.2 绝对路径和相对路径 2.3.3 判断功能的方法 2.3.4 创建删除功能的方法 2.3.5 目录的遍历 3. 字节流 3…

【C++ Primer Plus习题】16.7

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <vector> #include <…

2024CCPC网络赛

vp链接&#xff1a;Dashboard - The 2024 CCPC Online Contest - Codeforces B. 军训 II 序列 a 从小到大排列或者从大到小排列时&#xff0c;不整齐度是最小的。方案数是所有相同数字的个数的排列数的乘积。如果首尾的数字不同的话&#xff0c;还要再乘个 2。 #include <…

高级大数据开发协会

知识星球——高级大数据开发协会 协会内容: 教你参与开源项目提供新技术学习指导提供工作遇到的疑难问题技术支持参与大数据开源软件源码提升优化以互利共赢为原则&#xff0c;推动大数据技术发展探讨大数据职业发展和规划共享企业实际工作经验 感兴趣的私聊我&#xff0c;…

2022年十九届中国研究生数学建模竞赛C题——优秀论文分析

● 引言&#xff1a;因为最近要参加研究生数学建模竞赛了&#xff08;第二十一届&#xff09;&#xff0c;学习和分析一下优秀的数模论文的&#xff1a;思路、写作。 虽然我说是 “优秀论文分析”&#xff0c;但其实更多是 “搬运” 哈哈哈… ✅ NLP 研 1 选手的学习笔记 笔者…

springboot+screw反向生成数据库说明文档

前言 最近公司人员结构调整&#xff0c;被迫接受一位资深老哥哥的活&#xff0c;他也是悲催&#xff0c;太老实了&#xff0c;默默的干活老黄牛&#xff0c;不会叫。又没有山头&#xff0c;直接领导组长也是不给力。哎&#xff0c;哪里都有江湖&#xff0c;愿我码农儿女都能被善…

Android Studio Menu制作

文章目录 一、创建菜单在Activity上新建onCreateOptionsMenu新建menu目录及资源文件新建Menu一级菜单在Activity上加载Menu测试效果 二、菜单点击事件 一、创建菜单 在Activity上新建onCreateOptionsMenu Overridepublic boolean onCreateOptionsMenu(Menu menu) {return supe…

数据结构-3.链表

前言 本篇博客给大家带来的是链表的知识点, 其中包括面试经常会提问的真题 ArrayList 和 LinkedList 的区别 . 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条, 如果分享不成功, 那我就会回你一下,那样你就分享成…

Mysql调优之性能监控(一)

前言&#xff1a; 官网就是最好的老师&#xff1a;MySQL&#xff0c;里面各种语法跟参数跟性能调试工具 一、使用show profile查询剖析工具 -- 开启 SET profiling 1; -- 关闭 SET profiling 0; -- 显示查询的性能分析信息 show profiles; -- 显示具体查询id的执行步骤耗时 S…

免费好用的ppt素材库有哪些?这2个在线网站值得推荐!

ppt素材去哪找&#xff1f; 对于很多做PPT的人来说&#xff0c;做PPT的过程中&#xff0c;不是在找素材&#xff0c;就是在去找ppt素材的路上&#xff0c;想寻找到与内容相匹配的ppt素材&#xff0c;往往占用了大量的时间&#xff0c;且ppt和ppt素材库本身是分离的&#xff0c…

超好用!分享测评10款AI论文写作助手自动生成器

在当今学术研究和写作领域&#xff0c;AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是10款超好用的AI论文写作助手自动生成器&#xff0c;其中特别推荐千笔-AIPassPap…

AI带货直播虚拟主播的生成代码!

随着AI技术的飞速发展&#xff0c;AI带货直播虚拟主播已成为电商行业的新宠&#xff0c;这些虚拟主播不仅能24小时不间断地进行直播&#xff0c;还能通过智能互动提升用户体验&#xff0c;为商家带来更多的销售机会&#xff0c;本文将分享五段关键源代码&#xff0c;帮助读者了…

手写Spring第二篇,实现一个超级无敌爆炸简单的Spring工厂

今天开始我要手写一个Spring&#xff0c;就是这么膨胀。小小Spring&#xff0c;拿下&#xff01;注意是小小Spring哈&#xff0c;不是Spring本体&#xff0c;毕竟本体连看懂都难&#xff0c;就别说能充分理解然后手写出来。 本次手写Spring全程参考 第01章&#xff1a;开篇介绍…

运行容器应用

kubernetes通过各种controller来管理pod的生命周期&#xff0c;为了满足不同的业务场景&#xff0c;kubernetes开发了Deployment&#xff0c;ReplicaSet&#xff0c;DaemonSet&#xff0c;StatefulSet&#xff0c;Job等多种ControllerDeployment&#xff1a; kubectl run nginx…

视频去重剪辑软件哪个好用?这3款工具值得一试!

很多人都喜欢在视频平台上分享自己的剪辑作品。随着视频数量的激增&#xff0c;视频去重成为了一个不可忽视的问题。无论是为了遵守版权法规&#xff0c;还是为了提升内容的独特性和吸引力&#xff0c;选择一款好用的视频去重剪辑软件都显得尤为重要。本文将推荐几款优秀的视频…

硬件工程师笔试面试——晶振

目录 13、晶振 13.1 基础 晶振原理图 晶振实物图 13.1.1 概念 13.1.2 工作原理 13.1.3 应用领域 13.1.4 产品类型 13.2 相关问题 13.2.1 晶振的工作原理是什么,它如何保证频率的稳定性? 13.2.2 在工业控制领域,晶振是如何确保精确度的? 13.2.3 晶振的Q值是如何…

pc端的屏保实现

背景 偶然间&#xff0c;在使用一款google插件的时候&#xff0c;发现它有一个小功能&#xff0c;只要我停留在它的页面不操作10分钟以上&#xff0c;就会自动给我打开一个屏保界面&#xff0c;这样的 目的 这种华而不实的功能&#xff0c;正好适合个人博客&#xff0c;所以…

STM32MP157/linux驱动学习记录(二)

38.Linux INPUT 子系统实验 按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备&#xff0c;只是在此基础上套上了 input 框架&#xff0c;用户只需要负责上报输入事件…

健身器材识别系统源码分享

健身器材识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…