【Linux】守护进程(附终端、进程组、会话的介绍)

news2024/11/23 19:31:03

目录

      • 1、终端
      • 2、进程组
      • 3、会话
      • 4、守护进程

橙色

1、终端

echo $$ 

可以查看当前终端进程的id
在这里插入图片描述

  • 默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端、进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准错误输出写也就是输出到显示器上。

2、进程组

  • 进程组和会话在进程之间形成了一种两级层次关系︰进程组是一组相关进程的集合.会话是一组相关进程组的集合。进程组合会话是为支持shell作业控制而定义的抽象概念,用户通过shell 能够交互式地在前台或后台运行命令
  • 进行组由一个或多个共享同一进程组标识符(PGID)的进程组成。一个进程组拥有一个进程组首进程,该进程是创建该组的进程,其进程ID为该进程组的 ID,新进程会继承其父进程所属的进程组 ID。
  • 进程组拥有一个生命周期.其开始时间为首进程创建组的时刻,结束时间为最后一个成员进程退出组的时刻。一个进程可能会因为终止而退出进程组。也可能会因为加入了另外一个进程组而退出进程组。进程组首进程无需是最后一个离开进程组的成员。

3、会话

  • 会话是一组进程组的集合。会话首进程是创建该新会话的进程,其进程ID会成为会话ID。新进程会继承其父进程的会话ID。
  • 一个会话中的所有进程共享单个控制终端。 控制终端会在会话首进程首次打开一个终端设备时被建立。一个终端最多可能会成为一个会话的控制终端。
  • 在任一时刻,会话中的其中一个进程组会成为终端的前台进程组,其他进程组会成为后台进程组。只有前台进程组中的进程才能从控制终端中读取输入。当用户在控制终端中输入终端字符生成信号后,该信号会被发送到前台进程组中的所有成员。
  • 当控制终端的连接建立起来之后,会话首进程会成为该终端的控制进程。

4、守护进程

  • 守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务器。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待某些发生的事件。一般采用 d 结尾的名字。
  • 守护进程具备以下特征:1、生命周期很长,守护进程会在系统启动的时候被创建并一直运行直至系统被关闭。2、它在后台运行并且不拥有控制终端。没有控制终端确保了内核永远不会为守护进程自动生成任何控制信号以及终端相关的信号(如SIGINT、SIGQUIT)

守护进程的创建步骤:

  • 执行一个 fork(),之后父进程退出,子进程继续执行
  • 子进程调用 setsid() 开启一个新会话
  • 清除进程的 umask 以确保当守护进程创建文件和目录时拥有所需的权限
  • 修改进程的当前工作目录,通常会改为根目录(/)。
  • 关闭守护进程从其父进程继承而来的所有打开着的文件描述符。
  • 在关闭了文件描述符 0、1、2 之后,守护进程通常会打开 /dev/null 并使用 dup2() 使所有这些描述符指向这个设备。
  • 核心业务逻辑。

代码举例:

/*
    写一个守护进程,每隔2s获取一下系统时间,将这个时间写入到磁盘文件中。
*/

#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <signal.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

void work(int num) {
    // 捕捉到信号之后,获取系统时间,写入磁盘文件
    time_t tm = time(NULL);
    struct tm * loc = localtime(&tm);
    // char buf[1024];

    // sprintf(buf, "%d-%d-%d %d:%d:%d\n",loc->tm_year,loc->tm_mon
    // ,loc->tm_mday, loc->tm_hour, loc->tm_min, loc->tm_sec);

    // printf("%s\n", buf);

    char * str = asctime(loc);
    int fd = open("time.txt", O_RDWR | O_CREAT | O_APPEND, 0664);
    write(fd ,str, strlen(str));
    close(fd);
}

int main() {

    // 1.创建子进程,退出父进程
    pid_t pid = fork();

    if(pid > 0) {
        exit(0);
    }

    // 2.将子进程重新创建一个会话
    setsid();

    // 3.设置掩码
    umask(022);

    // 4.更改工作目录
    chdir("/root");

    // 5. 关闭、重定向文件描述符,先创建指向null的文件描述符fd,再把标准输入标准输出和标准错误重定向到null文件,
    //否则的话使用printf打印的信息会直接输出到终端。而重定向后就会输入到我定向的文件中
    int fd = open("/dev/null", O_RDWR);
    dup2(fd, STDIN_FILENO);
    dup2(fd, STDOUT_FILENO);
    dup2(fd, STDERR_FILENO);

    // 6.业务逻辑

    // 捕捉定时信号
    struct sigaction act;
    act.sa_flags = 0;
    act.sa_handler = work;
    sigemptyset(&act.sa_mask);
    sigaction(SIGALRM, &act, NULL);

    struct itimerval val;
    val.it_value.tv_sec = 2;
    val.it_value.tv_usec = 0;
    val.it_interval.tv_sec = 2;
    val.it_interval.tv_usec = 0;

    // 创建定时器
    setitimer(ITIMER_REAL, &val, NULL);

    // 不让进程结束
    while(1) {
        sleep(10);
    }

    return 0;
}

编译运行该程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后就可以看到,在我设置的工作目录(这个工作目录是可以改的,通过程序中的child即可更改)内,被成功创建了一个time.txt文件。通过vim进行浏览,可以看到时间被不停地写入到了time.txt文件内。
注意:使用ps aux可以发现./daemon是存在的,该进程是守护进程,没办法通过控制终端停止。只能使用kill -9 pid强制杀死。

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

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

相关文章

PGXC GaussDB

PGXCA PGXC&#xff08;PostgreSQL eXtended Coordinator&#xff09;是一个基于 PostgreSQL 架构的分布式数据库解决方案。它扩展了 PostgreSQL&#xff0c;为用户提供了在多个节点上分布式存储和处理数据的能力。 PGXC 的设计目标是将 PostgreSQL 扩展为能够处理大规模数据…

2023 年互联网上 10个最佳联盟营销论坛(付费和免费)

2023 年互联网上 10个最佳联盟营销论坛&#xff08;付费和免费&#xff09; 在文章中&#xff0c;我将分享 2023 年的 10 个最佳联盟营销论坛。 您是联盟营销的新手并正在寻找向专业人士学习的地方吗&#xff1f; 您来对地方了&#xff0c;我们赞赏您加入联盟营销论坛的决定…

【C++初阶】9. string类的模拟实现

string类的完整实现放这里啦&#xff01;快来看看吧 1. string类的成员 string类的作用就是将字符串类型实现更多功能&#xff0c;运算符重载&#xff0c;增删改查等等操作&#xff0c;所以其成员就包含char*的字符串 private:char* _str;size_t _capacity;size_t _size;2. …

三对角矩阵原理及C++实现

一、三对角矩阵 1.三对角矩阵概念 2.三对角矩阵元素数量 对于给定n阶方阵M&#xff0c;若其为三对角矩阵&#xff0c;则元素个数N为&#xff1a; 若n1&#xff0c;此时方阵只有一个元素M[0][0]&#xff0c;由定义知该元素也在三对角线上。故N1。若n>1&#xff0c;由三对角…

chatgpt赋能python:Python文件夹的使用和优化

Python 文件夹的使用和优化 文件夹是计算机操作系统中最基本的存储单位之一。在计算机领域&#xff0c;文件夹也被称为目录。文件夹中可以存储多个文件或其他文件夹&#xff0c;使得文件在计算机中可以更好的组织和管理。基于Python语言&#xff0c;我们可以很容易地创建、读取…

javaEE基于springboot的小区社区文化活动报名系统jsp生活服务网站

社区文化宣传网站采用的开发框架为springboot框架&#xff0c;开发工具采用Eclipse&#xff0c;idea 服务器用的是Tomcat。编码语言是Java&#xff0c;数据库采用Mysql数据库。 本社区文化宣传网站&#xff0c;主要服务的用户是社区附近的居民&#xff0c;为居民展示最新的新闻…

带电更换10kV架空线路直线杆绝缘子(绝缘手套作业法)

一、现场复勘 1.核对线路及杆塔号 线路双重名称及杆号无误。 2.检查杆身质量 3.检查电杆埋深 4.检查拉线受力情况 5.检查相邻杆情况 作业点及相邻侧电杆之间导线应无断股等现象。 6.检查气象条件 作业前需进行湿度和风速的测量&#xff0c;风力大于5级&#xff0c;或湿度大…

5分钟搞定验证码

验证码生成 本效果是利用easy-captcha工具包实现&#xff0c;首先需要添加相关依赖到pom.xml中&#xff0c;代码如下&#xff1a; <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6…

链式二叉树高质量OJ—【Leedcode】

目录 ​编辑 1. 单值二叉树 题目 题目分析 代码实现 不带返回值版本 带返回值版本 递归展开图 2. 相同的树 题目 题目分析 代码实现 3. 对称二叉树 题目 题目分析 代码实现 4. 另外一颗子树 题目 题目分析 代码实现 递归展开图 5. 二叉树的前、中、后序遍…

给电脑重装系统有什么坏处吗

电脑重装系统是解决一些问题的常见方法&#xff0c;但是它也存在一些潜在的坏处。本文将为您详细介绍电脑重装系统的坏处&#xff0c;并提供一些注意事项&#xff0c;帮助您做出明智的决策。 工具/原料&#xff1a; 系统版本&#xff1a;Windows10 品牌型号&#xff1a;惠普…

涂鸦智能发布全球首款Matter+Alexa Built-in涂鸦智选智慧中控屏L

根据Parks Associates今年4月发布的《Next-Generation Smart Home: Building for the Future》显示&#xff0c;41%的美国互联网家庭拥有智能家居设备&#xff0c;越来越多的家庭正在部署全屋智能。 当家中出现越来越多的智能设备时&#xff0c;智慧中控屏&#xff0c;凭借“所…

行业报告 | AIGC应用与实践展望报告:人工智能重塑内容产业的作业模式

原创 | 文 BFT机器人 前言 Introduction 不可否认AIGC的出现似乎已经让大家预见了Al应用的拐点&#xff0c;其创造性与智能性一夜之间刷新了大众认知。但去伪存真&#xff0c;在市场火爆的背后其真正的应用及商业价值几何&#xff0c;更待我们冷静地剖析。 01 概念重生&#…

破解excel单元格保护

EI目录.xlsx 被保护&#xff0c;想查其中期刊&#xff0c;却不能直接复制。 step1.文件后缀改成.rarstep2.360压缩包打开&#xff0c;找到【sheet1.xml】step3.使用记事本打开&#xff0c;删除部分指定代码step4.后缀改回.xlsx 我是用360压缩包可以直接在.rar中 进行修改。 …

生态环境监测好帮手——便携式水污染物监测设备

便携式水污染物监测设备也可以称作便携式水质多参数检测仪 根据生态环境保护需要而专门研发的一款可快速准确测定地表水、地下水、城市污水及工业废水中CODcr、氨氮、总磷、总氮等50余种指标&#xff0c;浓度直读&#xff1b;可广泛用于水厂、食品、化工、冶金、环保及制药行业…

《机器人SLAM导航核心技术与实战》第1季:第5章_机器人主机

视频讲解 【第1季】5.第5章_机器人主机-视频讲解 【第1季】5.1.第5章_机器人主机_X86与ARM主机对比-视频讲解 【第1季】5.2.第5章_机器人主机_ARM主机树莓派3B-视频讲解 【第1季】5.3.第5章_机器人主机_ARM主机RK3399-视频讲解 【第1季】5.4.第5章_机器人主机_ARM主机Jetso…

chatgpt赋能python:Python文件大小函数:了解文件大小的方法和掌握文件操作技巧

Python文件大小函数&#xff1a;了解文件大小的方法和掌握文件操作技巧 文件大小是我们经常需要考虑的一个问题&#xff0c;无论是在计算机存储、文件上传、程序优化等场景中都需要关注。在Python中&#xff0c;我们可以通过文件操作函数来查询文件大小&#xff0c;这篇文章将…

看了两位阿里P10的成长经历,我的认知升华了

两位 P10 大佬的成长经历 相信不少人和我一样&#xff0c;对这些高段位大佬的成长经历有很强的好奇心&#xff0c;想知道他们是如何达到这一步的&#xff0c;这期间有什么关键的选择。这一节我们来看下他们的成长经历&#xff0c;通过了解前辈是如何成长的&#xff0c;可以帮助…

Oracle11G安装说明

Oracle11G安装说明 一、序二、安装安装依赖包基础环境配置安装Oracle 三、配置Oracle 一、序 Oracle和MySQL语法区别&#xff1a;https://blog.csdn.net/lanmuhhh2015/article/details/97763615 Oracle创建用户、角色、授权、建表&#xff1a;https://www.cnblogs.com/roger1…

chatgpt赋能python:Python散点图的颜色设置

Python散点图的颜色设置 什么是散点图&#xff1f; 散点图是一种数据可视化的图表类型。它用于观察两个变量之间的关系。通常&#xff0c;x轴表示一个变量&#xff0c;y轴表示另一个变量。每个点表示一个数据点&#xff0c;它在x和y轴上分别具有对应的值。我们可以通过比较散…

再获数千万元追加投资!宏景智驾B轮总融资已近「5亿元」

5月26日&#xff0c;宏景智驾&#xff08;Hyperview&#xff09;宣布获得阿美风险投资&#xff08;Aramco Ventures&#xff09;旗下多元化成长基金Prosperity7 Ventures数千万元的追加投资&#xff0c;这也是继2022年2月Prosperity7独家投资宏景智驾超亿元战略融资后又一次投出…