Linux:守护进程(进程组、会话和守护进程)

守护进程

(1)What(什么是守护进程)

在了解守护进程的同时,我们有必要介绍一下进程组和会话的概念,因为进程组和会话在创建守护进程的过程中不可或缺

守护进程:

本质就是一个后台进程,不依赖于具体终端、生命周期比较长

进程组:

进程的集合,该集合有一个ID,被称为"进程组ID",此外,每个进程组都有一个组长,进程组的ID等于组长进程的ID

会话

进程组的集合就是一个会话,每个会话有一个会长(这个会长就是一个守护进程)

(2)Why(为什么需要守护进程)

守护进程的用途十分关键,系统的后台监控、资源管理、以及在服务器中提供服务的程序,都离不开守护进程

(3)How(如何使用)

A.进程组的相关函数

cpp 复制代码
int gid = getpgrp(); //获取当前进程所在进程组的组ID
int gidTmp = getpid(pid); //获取进程pid所在进程组的组ID
setpgid(pid, pgid); //移动pid进程到进程组pgid中,或者创建新的进程组

B.会话的相关函数

说明:所谓创建守护进程,本质就是在期望成为守护进程的代码中调用setsid函数,即可将对应进程设置为守护进程

cpp 复制代码
pid_t sid = getsid(pid); //获取进程pid所在的会话ID(即会长ID)
pid_t sid = setsid(); //将当前进程设置为守护进程

C.具体如何创建守护进程

step01: 创建子进程、退出父进程

cpp 复制代码
int pid = fork();
if(pid>0) exit(0);

step02:子进程成为守护进程

cpp 复制代码
if(pid == 0)
{
	setsid();
	...
}

step03:修改子进程的工作目录(非必要)

cpp 复制代码
chdir("/home/lv");

step04:设置守护进程的文件掩码(非必要)

用于去掉文件的某些权限

cpp 复制代码
mode_t umask(mode_t mask);

step05: 关闭/重定向文件描述符(非必要)

将守护进程默认的STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO三个文件描述符进程重定向到fd,代码示例如下:

cpp 复制代码
int fd = open("/dev/null", O_RDWR);
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
相关推荐
徐小黑ACG4 小时前
nginx配置文件
linux·服务器·nginx
新时代牛马4 小时前
Linux VFS 完整篇:从path_openat、dentry/inode 到page cache 与挂载排障
linux·运维·服务器
java_logo4 小时前
Docker 部署 Rocky Linux:轻松搭建 RHEL 兼容企业级基础镜像平台
linux·docker·容器·rocky linux·基础镜像·轩辕镜像·rhel 兼容
拂拉氏4 小时前
【知识讲解】 Linux虚拟地址空间认识
linux·虚拟地址空间
cloudfantasy5 小时前
docker直接二进制安装,非编译。KylinV10SP3 aarch64有效
运维·docker
新时代牛马6 小时前
Linux 驱动中断与定时完整篇:从 request_threaded_irq 到hrtimer 选型与排障
linux·运维·服务器
考虑考虑6 小时前
nginx打印请求日志
运维·后端·nginx
数字补给站8 小时前
Windows 10 + Hyper-V + Terraform + cloud-init:批量产出 3 台 Ubuntu 的实践笔记
运维·ai编程
分支预测失败8 小时前
RISC-V 核间中断 IPI 实战:从 MSIP 寄存器到 IMSIC 消息投递
linux·后端
GeW9 小时前
RHCE考试避坑指南"90%考生容易忽略的细节
linux