首页 > 系统相关 >Linux:守护进程(进程组、会话和守护进程)

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

时间:2024-08-02 18:55:37浏览次数:15  
标签:FILENO pid fd Linux 进程 ID 守护

守护进程

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

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

守护进程:

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

进程组:

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

会话

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

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

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

(3)How(如何使用)

A.进程组的相关函数

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

B.会话的相关函数

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

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

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

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

int pid = fork();
if(pid>0) exit(0);

step02:子进程成为守护进程

if(pid == 0)
{
	setsid();
	...
}

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

chdir("/home/lv");

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

用于去掉文件的某些权限

mode_t umask(mode_t mask);

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

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

int fd = open("/dev/null", O_RDWR);
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);

标签:FILENO,pid,fd,Linux,进程,ID,守护
From: https://blog.csdn.net/qq_42279379/article/details/140864801

相关文章

  • Linux系统编程-open,close,重载和变参
    open函数open的用法第一个参数是待打开的文件名,第二个参数是位图。flags(位图)必须包含以下三项:只读,只写,读写。0个或多个文件的创建选项和文件的状态选项,可以以按位或的方式放到文件中去。第一个为只读。第二个为读写。第三个为只写,并且文件不存在的话要创建,而且文件......
  • Linux 常见编辑器
    命令行编辑器VimLinux上最出名的编辑器当属Vim了。Vim由Vi发展而来,Vim的名字意指ViIMproved,表示Vi的升级版。Vim对于新手来说使用比较复杂,不过学会了之后会有效率上的提升,建议先学会使用Vim编辑并保存文件,之后在使用的过程中再逐渐学习高级用法。Vim是Ubuntu......
  • Win11不在C盘安装WSL2(Linux环境),安装Nvidia驱动和默认使用Win11的网络代理服务
    众所周知,WSL2为Windows用户提供了一个强大、高效且灵活的Linux环境,特别适合开发者使用。它结合了Windows和Linux的优点,为用户提供了更加全面和高效的工作环境。但缺点也很明显,那就是默认安装在本来空间就不富裕的C盘。本次我们在非C盘的盘符快速安装基于wsl2的linux开......
  • Linux
    在Linux系统中,主流的图形显示系统主要有以下几种:XWindowSystem(X11)简介XWindowSystem,通常简称为X或X11,是历史最悠久、最广泛使用的图形显示系统。提供与硬件无关的基本图形显示功能,并支持网络透明性。特点支持多种平台和硬件。具有丰富的窗口管理器和桌面环境......
  • Docker①_VMware下载和部署_Linux
    目录1.VMware下载和部署Linux虚拟机1.1VMWare正版安装部署1.2VMWare个人安装1.3网络类型设置为桥接模式1.3.1参考配置为桥接模式1.3.2三种模式区别1.3.3VMnet1和8的IP地址的主要用途1.4配置静态ip2.常见问题解决Xshell连接虚拟机(有前面部分步骤图)Centos7静......
  • 在Linux上创建一个.NET Core应用作为服务运行
    要在Linux上创建一个.NETCore应用作为服务运行,你可以使用systemd来管理你的服务。以下是创建服务的基本步骤和示例代码:确保你的.NETCore应用已经发布并且可以在Linux上运行。创建一个新的systemd服务文件。创建一个名为yourapp.service的文件,替换yourapp为你的应用......
  • crontab在linux中的语法规则
    总结:  分钟小时日月周数值范围 0~590~231~311~120~7(0和7都表示周日);MON~SUN每* 每分钟每小时每天每月 区间-a-b:从a分到b分a-b:从a点到b点a-b:从a号到b号a-b:从a月到b月a-b:从周a......
  • linux shell学习(上)
    第一个shell脚本打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell脚本,扩展名就用php好了。输入一些代码,第一行一般是这样:实例#!/bin/bashecho"HelloWorld!"#......
  • linux shell 写的一个小玩意(bash含99乘法表和计算器)
     esac.sh 主页面#!/bin/shwhile:do    echo"***********************************"    echo"*                *"    echo"*  输入你想要点的妹妹:1-3号 *"    echo"*    ......
  • Linux新建一个服务
    新建一个服务你可以创建一个Systemd服务单元,以便在系统启动时运行特定的脚本或程序。首先,创建一个.service文件,例如my_service.service,并将其放在/etc/systemd/system/目录下。在这个文件中,定义你的服务,包括启动方式、依赖性等。例如,my_service.service文件可能如下所示:[Unit]......