Linux——守护进程

简述

不受用户登录、注销影响的进程称为守护进程

特点

后台运行:守护进程在后台默默地执行任务,不与用户交互。它不会向终端输出信息,也不会从终端接收输入。

无终端关联:守护进程通常与任何终端会话(比如SSH会话)无关联。即使用户注销或关闭终端,守护进程仍然继续运行。

独立性:守护进程通常是独立于其他进程的,它没有父进程。一般来说,守护进程是由操作系统启动的,并且不受其他进程的影响。

任务处理:守护进程通常用于执行一些系统级任务,例如定期备份、日志处理、网络服务等。它们可以在系统启动时自动启动,并在系统运行期间一直保持活动状态。

进程组

简述

进程组(Process Group)是一个或多个相关进程组成的集合。同一进程组中的进程共享同一个进程组ID(PGID),并且它们可以用于进行进程间通信和控制。

测试

sleep 1000 | sleep 2000 | sleep 3000 &
sleep 4000 | sleep 5000 | sleep 6000 &

我们使用以上命令来创建6个进程,最后的&符号是为了让他们在后台运行,而不占用当前的输入输出,当前的终端可以继续使用。

当我们使用ps对其查看的时候就可以看到对应的PGID(进程组ID)

当我们分别创建两组进程的时候,第一个创建的进程就被称为组长,并且这一组的进程组ID就是和该组长进程的PID是一致的。 

fg与bg命令

作用

fg +作业号 将任务放到前台
bg+作业号 将任务放到后台

由于我们的Linux服务器有且只能有一个前台进程,所以使用fg让其他进程变成前台进程的时候,bash(命令行解释器)就自动被放到后台了。

作业

SID

在Linux中,SID(Session ID)是一个用于标识会话(Session)的唯一标识符。会话是包含一个或多个进程组的集合,其中一个进程是会话的领导者(Session Leader)。SID用于在内核中唯一标识每个会话。

守护进程的模拟实现

#pragma once#include <unistd.h>
#include <signal.h>
#include <cstdlib>
#include <cassert>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#define DEV "/dev/null"void daemonSelf(const char *currPath = nullptr)
{// 1. 让调用进程忽略掉异常的信号signal(SIGPIPE, SIG_IGN);// 2. 如何让自己不是组长,setsidif (fork() > 0)exit(0);// 走到这里肯定是子进程 -- 守护进程,精灵进程,本质就是孤儿进程的一种!pid_t n = setsid();assert(n != -1);// 3. 守护进程是脱离终端的,关闭或者重定向以前进程默认打开的文件// 将文件描述符 0 1 2 对应的操作重定向到/dev/null里面// 默认在/dev/null里面读和写 既不阻塞我们的读写操作,又不会读出和写出任何东西int fd = open(DEV, O_RDWR);if (fd >= 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}else{close(0);close(1);close(2);}// 4. 可选:进程执行路径发生更改if (!currPath)chdir(currPath);
}

具体步骤:

1. 让调用进程忽略掉异常的信号

2. 让自己不是组长,setsid

3. 守护进程是脱离终端的,关闭或者重定向以前进程默认打开的文件

将文件描述符 0 1 2 对应的操作重定向到/dev/null里面

默认在/dev/null里面读和写 既不阻塞我们的读写操作,又不会读出和写出任何东西

4. 可选:进程执行路径发生更改

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

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

相关文章

安全生产作业现场违规行为识别 opencv

安全生产作业现场违规行为识别算法通过pythonopencv网络模型算法框架设定了各种合规行为和违规行为的模型&#xff0c;安全生产作业现场违规行为识别算法检测到违规行为&#xff0c;将立即进行抓拍并发送告警信息给相关人员&#xff0c;以便及时采取相应的处置措施。OpenCV是一…

docker笔记8:Docker网络

1.是什么 1.1 docker不启动&#xff0c;默认网络情况 ens33 lo virbr0 在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后&#xff0c;启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr0网卡&#xff1a;它还有一个固定的默认IP地址192.168.122…

大模型微调总结

大模型微调经验分享 大模型微调目的 模型&#xff1a;大模型仍是欠拟合状态。在某些特定任务上无法达到实际业务需求 or 性能差无法直接使用 > 改善特定任务下欠拟合程度 数据&#xff1a;预训练数据分布和特定任务数据分布不一致 >将特定任务、场景的语料的内在关系融…

Gitea--私有git服务器搭建详细教程

一.官方文档 https://docs.gitea.com/zh-cn/说明 gitea 是一个自己托管的Git服务程序。他和GitHub, Gitlab等比较类似。他是从 Gogs 发展而来&#xff0c;gitea的创作团队重新fork了代码&#xff0c;并命名为giteagitea 功能特性多&#xff0c;能够满足我们所有的的代码管理需…

SSM(Spring-Mybatis-SpringMVC)

文章目录 1. 介绍1.1 概念介绍 2 SSM整合框架3. SSM功能模块开发4 测试4.1 业务层接口测试4.2 表现层接口测试 5.优化 -表现层数据封装6.异常处理 1. 介绍 1.1 概念介绍 SSM项目是指基于SpringSpringMVCMyBatis框架搭建的Java Web项目。 Spring是负责管理和组织项目的IOC容器和…

解决deepspeed框架的bug:不保存调度器状态,模型训练重启时学习率从头开始

deepspeed存在一个bug&#xff0c;即在训练时不保存调度器状态&#xff0c;因此如果训练中断后再重新开始训练&#xff0c;调度器还是会从头开始而不是接着上一个checkpoint的调度器状态来训练。这个bug在deepspeed的github中也有其他人提出&#xff1a;https://github.com/mic…

laragon 为 php 安装 Xdebug 扩展

众所周知&#xff0c;php 自带的 var_dump() 输出格式很不直观 而 laragon 作为很好的 windos 下开发环境很受欢迎&#xff0c;本文就介绍如何快速为 laragon 的 php 安装 Xdebug&#xff0c;方便开发调试 一&#xff1a;启动开发环境&#xff0c;在任意可访问 php 页面中输出 …

英码科技受邀亮相2023WAIE物联网与人工智能展,荣获行业优秀创新力产品奖!

8月28日-30日&#xff0c;2023WAIE 物联网与人工智能展在深圳福田会展中心顺利举办。英码科技受邀亮相本届展会&#xff0c;并现场重点展出了面向智慧交通、智慧校园、智慧应急、智慧园区等不同行业的创新AIoT产品、AI技术服务等内容&#xff0c;与生态伙伴积极探讨市场需求和问…

WordPress(6)网站侧边栏倒计时进度小工具

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 效果图在这里插入图片描述一、添加位置二、主题style.css文件中添加美化1.引入库2.添加自定义的HTML模块效果图 提示:以下是本篇文章正文内容,下面案例可供参考 一、添加位置 在主题中 child.js…

【文心一言大模型插件制作初体验】制作面试错题本大模型插件

文心一言插件开发初体验 效果图 注意&#xff1a;目前插件仅支持在本地运行&#xff0c;虽然只能自用&#xff0c;但仍然是一个不错的选择。&#xff08;什么&#xff1f;你说没有用&#xff1f;这不可能&#xff01;文心一言app可以支持语音&#xff0c;网页端结合手机端就可…

16字节协议的串口通信

1.协议要求 协议为帧传输&#xff0c;一共16字节。主要是2字节的固定帧头 EB 90&#xff0c;2字节的帧计数(用来计数发出的帧),10字节的数据和2字节的校验位 帧头&#xff1a;2字节&#xff0c;固定值 8’HEB、8’H90 帧计数&#xff1a;2字节&#xff0c;用来说明发出去帧是…

说说Omega架构

分析&回答 Omega架构我们暂且称之为混合数仓。 什么是ECS设计模式 在谈我们的解法的时候&#xff0c;必须要先提ECS的设计模式。 简单的说&#xff0c;Entity、Component、System分别代表了三类模型。 实体(Entity)&#xff1a;实体是一个普通的对象。通常&#xff0c…