进程:守护进程
一、守护进程的概念
- 守护进程是脱离于终端控制,且运行在后端的进程。(孤儿进程)
- 守护进程不会将信息显示在任何终端上影响前端的操作,也不会被终端产生的任何信息打断,例如(ctrl+c).
- 守护进程独立于控制终端,会周期性执行某个任务。(运行在死循环中)
- 守护进程用于:与操作系统启动相关的进程。大多数服务器都是用守护进程实现。
二、创建守护进程的流程
1.创建一个孤儿进程:所有任务运行在孤儿进程中,形式上脱离终端控制
让父进程结束运行,而子进程继续运行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{int res=fork();if(res>0){ //父进程exit(0);}else if(res==0){ //子进程while(1);}else{exit(0);}return 0;
}
2.新建会话:使子进程完全独立
setsid函数:创建新的进程组,创建新的会话组
pid_t setsid(void);
返回值:
成功,创建的会话组id sid
3.将当前进程对应的路径切换到根目录
chdir函数:切换路径
int chdir(const char *path);
返回值:
成功返回0
失败返回-1置位错误码
4.设置umask值
mode_t umask(mode_t mask);
功能:设置掩码
参数:
mask:掩码的值
返回值:总是会成功,返回mask
5.进行文件描述重定向
int dup(int oldfd):
功能:拷贝fd,产生一个新的文件描述符nfd
nfd产生的原则为最小未使用原则,fd和nfd都可以操作同一个文件
文件fd和nfd共用同一个光标
参数:
old:旧的文件描述符
返回值:
成功返回nfd,失败返回-1置位错误
int dup2(int oldfd,int newfd)
功能:dup2函数相当于文件描述符的重定向
把newfd重定向到oldfd中,以后向newfd写内容就是在向oldfd对应的文件中写内容
参数:
oldfd:旧文件描述符
newfd:新文件描述符
返回值:成功返回newfd,失败返回-1置位错误码
(实际使用:其实是吧newfd重新定位为oldfd,需要反过来)
三、代码演示
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{int res = fork();if(res == 0 ){//1.创建孤儿进程//2.创建会话setsid();//3.切换到根目录chdir("/");//4.重设文件掩码:守护进程一般保留文件原有权限umask(0);//5.创建日志文件//getdtablesize:获取进程的最大的文件描述符for(int i=3;i<getdtablesize();i++){close(i);//把之前开了的文件都关了}int fd;fd=open("my.log",O_RDWR|O_APPEND|O_CREAT,0666);if(fd==-1){perror("open");}//6.文件描述符重定向dup2(fd,0);dup2(fd,1);dup2(fd,2);//7.开启自己的服务while(1){write(1,"hello",6);putchar(10);sleep(1);}close(fd);}else if(res > 0)//父进程{exit(0);}else{perror("fork");return -1;}return 0;
}
运行结果:

相关文章:
进程:守护进程
一、守护进程的概念 守护进程是脱离于终端控制,且运行在后端的进程。(孤儿进程)守护进程不会将信息显示在任何终端上影响前端的操作,也不会被终端产生的任何信息打断,例如(ctrlc).守护进程独立…...
千里马平台项目管理理念
软件项目的成功和失败和技术关系不大,尤其是应用型软件,不可能有技术难关卡死了项目,大部分问题还是出现在项目管理层面。公司的业务形态是帮助客户构建自己的信息化生态圈,项目管理咨询也是其中的核心内容。 我们的软件项目管理理…...
GB 2312字符集:中文编码的基石
title: GB 2312字符集:中文编码的基石 date: 2024/3/7 19:26:00 updated: 2024/3/7 19:26:00 tags: GB2312编码中文字符集双字节编码区位码规则兼容性问题存储空间优化文档处理应用 一、GB 2312字符集的背景 GB 2312字符集是中国国家标准委员会于1980年发布的一种…...
我的创作周年纪念日
机缘 最初成为创作者的初心:整理自己的知识体系,普及前端知识 实战项目中的经验分享日常工作学习过程中的记录通过文章进行技术交流归纳和整理自己的知识体系 收获 创作的过程中收获: 获得了909粉丝的关注获得了很多正向的反馈,…...
MySQL为什么要用B+树?
二叉树(二叉查找树) 平衡二叉树(B树就是B-树)(解决了二叉查找树的极端情况) Q:具体是怎么解决的呢? A: 树左右两边层数相差不大于1一旦符合条件1的时候,就进行左旋/右…...
今天分享一个好看的输入法皮肤相信每个人心里住着一个少女心我们美化一下她吧
标题: 白日梦皮肤上线,百度输入法助你开启梦幻之旅! 正文: 大家好呀!今天我来给大家安利一款超级梦幻的百度输入法皮肤——“白日梦”系列! 这款皮肤的设计灵感来源于我们内心深处的白日梦,充…...
力扣刷题Days11第二题--141. 环形链表(js)
目录 1,题目 2,代码 2.1快慢指针 2.2,哈希表 3,学习与总结 3.1自己尝试写快慢指针 反思 1,题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达&…...
微信自动回复的设置
最近有客户来咨询,说是因为做内容引流到微信,所以每天很多人加他,每天要手动通过好友申请后打招呼,每天花费大量的时间去回答重复的问题,很机械的重复这些事。就问我们系统有没有能帮她解决这个烦恼的功能。 我说呀&a…...
SpringBoot源码解读与原理分析(一)SpringBoot整体概述
文章目录 第1章 SpringBoot整体概述1.1 Spring Framework1.1.1 Spring Framework的历史1.1.2 IOC与AOP 1.2 Spring Boot与Spring Framework1.3 Spring Boot的核心特性1.4 Spring Boot的体系 第1章 SpringBoot整体概述 Spring Framework 开发团队 支持不依赖外部容器的Web应用程…...
如何选择VR全景设备,才能拍摄高质量的VR全景?
随着VR全景技术的不断成熟和发展,VR全景已经成为了摄影爱好者乐于尝试的新手段,VR全景也为广大用户提供了一个全新的视角来探索世界,如果想要拍摄出高质量的VR全景,选择合适的VR全景拍摄设备以及掌握正确的拍摄技巧才是关键。 VR全…...
Vue 3 中的 ref 和 reactive 有什么区别?
Vue 3 中的 ref 和 reactive 有什么区别? Vue 3 引入了 Composition API,作为对传统 Options API 的补充。在 Composition API 中,ref 和 reactive 是两个核心的函数,用于创建响应式数据。虽然它们的目标都是使数据变得响应式&am…...
【SpringBoot】mybaitsPlus的多数据源配置
📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 mybatisPlus的多数据源配置 适用于多种场景:纯粹多库、 读写分离、 一主多从、 混合模式等 目前我们就来模拟一个纯粹多…...
安卓Java面试题 1-10
🔥 1、简述Android的4大组件是哪些,它们的作用?🔥 Android的4大组件 1:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态…...
强化学习中动作价值函数和状态价值函数的联系区别?
在强化学习中,动作价值函数(Q函数)和状态价值函数(V函数)都是值函数,用于评估在不同状态或状态动作对下的值。它们之间存在联系,但有一些区别: 动作价值函数(Q函数&#…...
Vue-Router路由介绍和使用
vue属于单页面应用,路由就是根据浏览器路径不同,用不同的试图组件替换这个页面内容 开启路由功能 如图在创建项目时候勾选rouler 这样创建好的项目就有路由功能 下一步 不同的访问路径 展示不同的页面内容 路由配置 路由连接组件 浏览器会解析为超链接 …...
Waves 14 Complete:后期混音效果全套插件,打造专业级音质体验
Waves 14 Complete,这款专为Mac和Windows平台打造的后期混音效果全套插件,将为您的音乐创作之旅增添一抹亮色。Waves 14 Complete以其丰富的功能和出色的性能,赢得了众多音乐制作人的青睐。它集合了众多高质量的音频处理插件,涵盖…...
DC-2靶机详解
写写自己打DC-2的过程 使用工具 kali DC-2的靶机下载地址为:https://www.vulnhub.com/entry/dc-2,311/ 环境配置。 Kali和DC-2都设置为NAT模式,都为仅主机模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 获取靶机ip:192.16…...
个人项目介绍4:三维园区篇
个人项目介绍: 地图铁路线路篇 地球卫星篇 火车站篇 三维园区篇 项目需求: 1.按比例全景显示三维园区 2.精确显示园区内设备设施 3.实时显示设备报警信息 4.显示园区内摄像监控设备,并可点击显示监控视频流 5.显示园区内的重大危险源和风险分布 …...
哪些公司在招聘GIS开发?为什么?
之前我们给大家整理汇总了WebGIS在招岗位的一些特点,包括行业、学历、工作经验等。WebGIS招聘原来看重这个!整理了1300多份岗位得出来的干货! 很多同学好奇,这些招GIS开发的都是哪些公司?主要是做什么的? …...
电脑自带dll修复在哪里,dll修复工具一键修复dll丢失问题
xinput1_3.dll文件是一个Windows操作系统中的动态链接库(DLL)文件,它是微软DirectX软件开发包的一部分,主要用于支持游戏控制器和其他输入设备的交互。这个文件是DirectInput API的一个组件,DirectInput是DirectX中处理…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
