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;比如机器人路…

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 固件的编译流程。 本章分为如下几个小节&…

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;实例化、属性注入、初始化、…

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系统使用快速…

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

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

windows使用curl命令出现乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

海口注册公司代理记账的服务优势与流程解析

在海口注册公司加入代理记账服务有多种优势。代理记账公司提供专业的财务服务&#xff0c;帮助企业节约成本、提高效率&#xff0c;实现财务管理的合规性。以下是代理记账服务的主要优势和流程解析&#xff1a; https://www.9733.cn/news/detail/173.html 一、代理记账服务的…

分布式光纤测温DTS在工程现场中稳定性与可靠性如何?

20年前&#xff0c;分布式光纤测温(Distributed Temperature Sensing&#xff0c;DTS)技术的发展尚不成熟&#xff0c;设备成本高昂&#xff0c;其稳定性与可靠性也存在一定问题。然而&#xff0c;经过二十多年的不断发展与创新&#xff0c;DTS技术在工程现场应用中取得了显著进…

企业智慧办公管理平台

摘要 在之前的疫情中&#xff0c;大多数企业都受到了较大的冲击&#xff0c;然而一些公司却因为工作的特殊性可以居家远程办公&#xff0c;不过这些企业在管理员工的过程中却遇到了较大的困难&#xff0c;这是因为这些企业的管理系统根本大多都无法管理员工的工作项目&#xf…

场外个股期权怎么看涨跌情况?怎么判断是选涨还是选跌?

今天带你了解场外个股期权怎么看涨跌情况&#xff1f;怎么判断是选涨还是选跌&#xff1f;在期权市场中&#xff0c;投资者想要在其中获得盈利&#xff0c;学会判断涨跌是期权投资者赚钱路上要走的第一步。 判断场外个股期权的涨跌情况主要可以从以下几个方面入手&#xff1a; …

Eigen矩阵模板类------c++

头文件 #include <Eigen/Core> #include <Eigen/Dense>矩阵 // 定义了一个2x3的浮点型矩阵 Eigen::Matrix<float, 2, 3> matrix_23;matrix_23 << 1, 2, 3, 4, 5, 6;cout << "matri_23" << endl;cout << matrix_23 <&l…

激励-保健理论和公平理论

激励-保健理论 herzberg的激励-保健理论中&#xff0c;保健因素是context of a job&#xff0c;激励因素是content of a job。 context of a job是受组织控制的因素&#xff0c;比如工作条件&#xff0c;基本工资&#xff0c;公司政策等&#xff0c;个人无法支配。content of…

【C语言】解决C语言报错:Buffer Overflow

文章目录 简介什么是Buffer OverflowBuffer Overflow的常见原因如何检测和调试Buffer Overflow解决Buffer Overflow的最佳实践详细实例解析示例1&#xff1a;字符串操作不当示例2&#xff1a;数组访问越界示例3&#xff1a;未检查输入长度示例4&#xff1a;使用不安全的函数 进…