29-Linux--守护进程

一.基础概念

1.守护进程:精灵进程,在后台为用户提高服务,是一个生存周期长,通常独立于控制终端并且周期性的执行任务火处理事件发生

2.ps axj:查看守护进程

3.进程组:多个进程的集合,由于管理进程

4.组长进程:由于标识每个进程组,进程组的ID是组长进程的ID

5.getsid():获取会话ID

6.getpgrp():获取组长进程的ID

7.tail -f 文件名 :查看日志文件的写入变化

二.编程流程

1.调用fork(),产生子进程A,退出父进程

2.脱离控制终端,建立新的会话

 进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的 shell 登录终端。 控制终端、登录会话和进程组通常是从父进程继承下来的。 我们的目的就是要摆脱它们 ,使之不受它们的影响。因此需要调用 setsid() 使子进程成为新的会话组长

setsid() 调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。 

3.fork()去掉子进程A的组长进程身份,禁止子进程A打开控制终端

现在,子进程A已经成为无终端的会话组长, 但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端,采用的方法是再次创建一个子进程B,

4.修改工作路径为根目录

5.清空掩码

进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取权限。为防止这一点,将文件创建掩模清除

6.关闭文件描述符

代码:

#include<stdio.h>      // 包含标准输入输出库
#include<stdlib.h>     // 包含标准库函数,如exit
#include<unistd.h>     // 包含Unix标准函数,如fork, setsid, sleep
#include<string.h>    // 包含字符串操作函数,如memset
#include<sys/stat.h>   // 包含文件状态相关函数,如umask
#include<fcntl.h>      // 包含文件控制选项,如open, close
#include<time.h>       // 包含时间函数,如time, asctime, localtimeint main()
{pid_t pid = fork(); // 创建一个新的进程if(pid != 0)       // 如果当前进程不是子进程(即父进程),则退出{exit(0);       // 退出父进程}setsid();          // 创建一个新的会话,该会话与终端脱离关联pid = fork();      // 再次创建一个新的进程if(pid != 0)      // 如果当前进程不是子进程(即上一个子进程的父进程),则退出{exit(0);       // 退出上一个子进程的父进程}chdir("/");        // 将当前工作目录更改为根目录"/"umask(0);          // 设置文件创建时的默认权限掩码为0,即不限制权限// 关闭所有打开的文件描述符for(int i=0; i<getdtablesize(); i++){close(i);     // 关闭文件描述符i}while(1)          // 无限循环{FILE* fp = fopen("/tmp/c2305d.log","a"); // 打开或创建日志文件以追加模式if(fp == NULL) // 如果文件打开失败{break;     // 退出循环}time_t tv;     // 定义时间变量time(&tv);     // 获取当前时间fprintf(fp,"time=%s",asctime(localtime(&tv))); // 将格式化的时间写入文件fclose(fp);    // 关闭文件sleep(3);      // 休眠3秒}
}

tail -f c2305d.log查看:

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

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

相关文章

Flask之模板

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、模板的基本用法 1.1、创建模板 1.2、模板语法 1.3、渲染模板 二、模板辅助工具 2.1、上下文 2.2、全局对象 2.3、过滤器 2.4、测试…

小米测开二面—80min中核

小米测开二面—80min中核 3.28 无自我介绍直接开问&#xff01;你的第一份实习是一个开发工作你的第二实习为什么又跑到测试了你的第一份实习遇到了哪些挑战你的逆向开发的开发目标是什么&#xff0c;使用了什么工具你最终开发落地是用在了什么方面上&#xff0c;比如机器人路…

什么是云主机?

云主机是新一代的主机租借服务&#xff0c;它整合了高性能服务器与优质网络带宽&#xff0c;有用处理了传统主机租借价格偏高、服务品良莠不齐等缺陷&#xff0c;可全面满意中小企业、个人站长用户对主机租借服务低本钱&#xff0c;高牢靠&#xff0c;易办理的需求。   关于大…

C语言入门系列:可迁移的数据类型

文章目录 1&#xff0c;精确宽度类型(exact-width integer type)2&#xff0c;最小宽度类型&#xff08;minimum width type&#xff09;3&#xff0c;最快的最小宽度类型&#xff08;fast minimum width type&#xff09;4&#xff0c;可以保存指针的整数类型。5&#xff0c; …

编译 CanMV 固件

前言 上一章节中已经搭建好了基于 CanMV 的 C 开发环境&#xff0c;这么一来便可以进行基于 C 语言和 FreeRTOS 的应用开发或者编译基于 MicroPython 语法的应用开发方式所需的 CanMV 固件&#xff0c;本 章就将带领读者体验一下 CanMV 固件的编译流程。 本章分为如下几个小节&…

为什么print语句被Python3遗弃?

在开发和维护python项目的时候发现经常有print语句报错&#xff0c;原因是python3放弃了print语句 print 语句 早就被列在了不可靠的语言特性列表中&#xff0c;例如 Guido 的“Python 之悔”&#xff08;Python Regrets&#xff09;演讲【1】&#xff0c;并计划在 Python 300…

Python期末复习:基础+数据结构

合法的标识符定义规则 以字母或下划线开头&#xff1a; 标识符必须以字母&#xff08;大写或小写&#xff09;或下划线 _ 开头。 后续字符可以是字母、数字或下划线&#xff1a; 后续字符可以是字母&#xff08;大写或小写&#xff09;、数字&#xff08;0-9&#xff09…

Unity 从0开始编写一个技能编辑器_02_Buff系统的Handler

BuffHandler可以是用于处理角色身上buff的Mono类&#xff0c;任何具备跟Buff交互的角色&#xff0c;都要携带这个BuffHandler脚本。如果你的Buff有额外的处理机制&#xff0c;比如互斥Buff&#xff08;如&#xff1a;免疫负面效果的霸体&#xff09;&#xff0c;需要在AddBuff方…

Anthropic AI模型Claude 3.5 Sonnet在Amazon Bedrock上正式可用

Claude 3.5 Sonnet是Anthropic最先进的Claude系列AI模型的新成员&#xff0c;比Claude 3 Opus更智能且价格只有其五分之一 北京——2024年6月21日 亚马逊云科技宣布&#xff0c;Anthropic最新、最强大的模型Claude 3.5 Sonnet现已在Amazon Bedrock上正式可用&#xff0c;该模型…

增强-MIGO物料消耗需要将物料描述写到会计凭证的摘要里面

财务比较闲提的需求&#xff0c;有些物料消耗需要将物料描述写到会计凭证的摘要里面&#xff0c; 找了一下增强点&#xff0c;随便搞了一下&#xff0c;可以了。

20240622 每日AI必读资讯

&#x1f916;力压GPT-4o&#xff01;新王Claude 3.5 Sonnet来了&#xff0c;直接免费可用 - 新模型在推理、知识和编码能力评估方面超越了以前的版本和竞争对手GPT 4o模型&#xff0c;同时其运行速度是Claude 3 Opus的两倍。 - 该模型可在http://Claude.ai和Claude iOS应用上…

Spring Bean 生命周期详解

Spring Bean 生命周期详解 在 Spring 框架中&#xff0c;Bean 的生命周期由 Spring 容器全权管理。了解和掌握 Bean 的生命周期对于使用 Spring 开发稳定且高效的应用程序至关重要。本文将详细介绍 Spring Bean 生命周期的五个主要阶段&#xff1a;实例化、属性注入、初始化、…

如何用vscode编写一个GO语言的入门代码

本章教程,主要介绍如何在VSCODE中,运行GO语言的入门代码。 一、准备一个GO语言代码 一个很简单的代码,用GO语言在控制台打印输出:Hello, World! package mainimport "fmt"func main() {fmt.Println("Hello, World!") }二、安装GO语言SDK 下载地址:

云服务与低代码开发的结合:重塑现代软件开发模式

随着数字化转型的深入推进&#xff0c;越来越多的企业开始将业务迁移到云端&#xff0c;以实现更高的灵活性、可靠性和成本效益。云服务已经成为企业数字化战略的重要组成部分。与此同时&#xff0c;低代码开发作为一种新兴的编程模式&#xff0c;也逐渐受到企业的关注。那么&a…

keepalive+nginx高可用架构

keepalivenginx架构 一.配置真实服务器web1和web2 1.关闭防火墙&#xff0c;并在真实服务器下载http服务 [rootlocalhost ~]# systemctl stop firewalld.service [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# yum install httpd -y 2.分别在web1和web2上制作网页…

【Redis】List的常用命令以及常用场景

Redis List 是一个简单的链表&#xff0c;支持在两端进行插入和删除操作。这种数据结构在许多场景下非常有用&#xff0c;例如任务队列、消息队列等。Redis 提供了一系列针对 List 的操作命令&#xff0c;帮助我们更高效地操作链表。 1. List常用命令 操作类型命令时间复杂度…

Ubuntu系统使用快速入门实践(八)—— git 命令使用

Ubuntu系统使用快速入门实践系列文章 下面是Ubuntu系统使用系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 Ubuntu系统使用快速入门实践系列文章总链接 下面是专栏地址&#xff1a; Ubuntu系统使用快速入门实践系列文章专栏 文章目录 Ubuntu系统使用快速…

高温工况下雷达物位计连续冷却方法

高温工况下雷达物位计连续冷却方法 1、提出前状况: 雷达物位计是一种新型物位测量仪表,它采用与介质非接触的测量方式,具有准确度高(分辨率可达1mm)、测量范围大、无可动部件,适用于粘度大的介质、有毒或无毒卫生型介质,有腐蚀性、磨蚀性介质的物位测量,它是通过天线…

【Qt6.3 基础教程 13】 掌握数据展示:使用QTableView和QStandardItemModel

文章目录 前言QTableView&#xff1a;表格式数据的强力工具主要特性 QStandardItemModel&#xff1a;灵活的数据模型主要特性 结合使用QTableView和QStandardItemModel步骤一&#xff1a;初始化模型步骤二&#xff1a;填充数据步骤三&#xff1a;创建视图并设置模型 结论 前言 …

JupyterLab使用指南(八):更改JupterLab左侧默认打开目录

在JupyterLab中&#xff0c;默认打开路径通常是由其配置文件中的root_dir设置决定的。如果你没有特意设置这个配置项&#xff0c;JupyterLab可能会使用当前用户的主目录或者上一次关闭时的路径作为默认打开路径。 更改JupyterLab默认路径的操作在不同操作系统下大体相似&…