【Linux】守护进程的定义,作用,创建流程
本文内容:
1.守护进程的定义
2.守护进程的作用
3.守护进程的创建过程
一.守护进程的定义
1.守护进程是脱离于终端并且在后台运行的进程
2.守护进程脱离终端是为了避免在执行过程中的信息在任何终端上显示,并且不被任何终端产生的终端信息所打断
3.守护进程通常在系统引导装入时启动
二.守护进程的作用
1.守护进程是一个生存周期较长的进程,通常独立于控制终端并且周期性的执行某种任务或者等待处理某些待发生的事件
2.大多数服务都是通过守护进程实现的
3.关闭终端,相应的进程都会被关闭,而守护进程却能够突破这种限制
三.守护进程的创建过程
背景知识:
1. 进程组:一个或多个进程的集合,进程组由进程组ID标识,进程组长的进程ID和进程组ID一致,并且进程组ID不会由于进程组长的退出而受到影响
2. 会话周期:一个或多个进程组的集合,比如用户从登陆到退出,这个期间用户运行的所有进程都属于该会话周期
3.setsid函数:创建一个新会话,并担任该会话组的组长,调用setsid函数的目的:让进程摆脱原会话,原进程组,原终端的控制
创建守护进程的过程:
1.创建子进程,父进程退出
子进程变成孤儿进程,然后由1号init进程收养
2.子进程创建新会话
调用setsid创建新的会话,摆脱原会话,原进程组,原终端的控制,自己成为新会话的组长
3.将当前目录改为根目录
正在运行的进程文件系统不能卸载,如果目录要回退,则此时进程不能做到,为了避免这种麻烦,以根目录为当前目录
4.重设文件权限掩码
子进程的文件权限掩码是复制的父进程的,不重新设置的话,会给子进程使用文件带来诸多麻烦
5.关闭不需要的文件描述符
子进程的文件描述符也是从父进程复制来的,那些不需要的文件描述符永远不会被守护进程使用,会白白的浪费系统资源,还可能导致文件系统无法结束
样例程序:守护线程每隔100s就向文件写入一句话
#include <iostream> #include<pthread.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<errno.h> #include<semaphore.h> #include<sys/wait.h> #include<sys/types.h> #include<fcntl.h> #include<sys/stat.h> using namespace std; #define max_file 65535 int main() { pid_t pc; int fd,len; char buf[]="this is a demo\n"; len=strlen(buf); pc=fork();//第一步,创建子进程 if(pc<0) { cout<<"fork error"<<endl; exit(1); } else if(pc>0) { exit(0);//第二步,父进程退出 } else { setsid();//第三步,创建新会话 chdir("/");//第四步,将当前目录改为根目录 umask(0);//第五步,重新设置文件权限掩码 for(int i=0; i<max_file; i++) { close(i);//第六步,关闭不需要的文件描述符 } while(1) { if((fd=open("/tmp/dameo.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0) { cout<<"open erro"<<endl; exit(1); } write(fd,buf,len+1); close(fd); sleep(100);//每隔100s输出一句话到文件 } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-07-17 HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
2018-07-17 HDU 1210 Eddy's 洗牌问题(找规律,数学)
2018-07-17 HDU1214 圆桌会议(找规律,数学)
2018-07-17 HDU1215 七夕节(模拟 数学)
2018-07-17 HDU 1216 Assistance Required(暴力打表)
2018-07-17 HDU 1220 Cube(数学,找规律)
2018-07-17 HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)