10.3 Linux_进程_创建守护进程

news2024/12/27 20:42:56

守护进程创建方法

守护进程是什么:

守护进程又叫精灵进程,是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。它是一个在后台运行孤儿进程,这使得守护进程不受终端的信息影响(比如ctrl c中断程序),同时守护进行也不能够向终端发送任何信息(标准输入、标准输出、标准错误被关闭)。

具体创建步骤如下:

  • 创建子进程,父进程退出。这使得子进程变为孤儿进程,被init收养后在后台运行。
  • 创建新的会话。这使得子进程成为新的会话组长,脱离原来的会话和进程组。
  • 改变当前工作目录。这一步非必须,目的是让守护进程的工作目录不能被卸载。
  • 重设文件掩码。这一步非必须,目的是创建文件时,权限不受系统默认掩码影响。
  • 关闭标准输入、标准输出、标准错误。这使得子进程不能和终端进行信息交互。

具体代码实现如下:

#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

int main(){
	pid_t pid;

	//1.创建子进程,父进程退出
	if((pid = fork())<0){
		perror("fork");
		return -1;
	}else if(pid > 0){
		exit(0);//父进程退出
	}
	//2.建立新的会话
	//printf("Debug:before setsid():pid = %d,pgid = %d,sid = %d\n",getpid(),getpgid(getpid()),getsid(getpid()));
	if(setsid()<0){
		perror("setsid");
		exit(0);
	}
	//printf("Debug:after setsid():pid = %d,pgid = %d,sid = %d\n",getpid(),getpgid(getpid()),getsid(getpid()));
	//3.更改工作目录
	chdir("/");//将工作目录改为根目录,确保工作目录不被卸载
	//4.重设文件掩码
	umask(0);//设置掩码为0000
	//5.关闭标准输入、标准输出、标准错误
	close(0);
	close(1);
	close(2);
	/*
	 守护进程功能代码
	 ........
	*/
	return 0;
}

存在的一些问题:

创建子进程,父进程退出后,通过ps -elf | grep xxx 查询,发现父进程的进程号不是1

问题如下图:

原因:这是因为init有许多事情做,在init中创建了一个子进程专门用来收留孤儿进程。

相关函数

1、终端创建守护进程

nohup <程序名> &

2、创建新的会话

函数声明如下:

pid_t setsid(void);

返回值:成功返回调用进程的会话ID,失败返回-1

注意:调用了setsid的进程,既是新的会长,也是新的组长。

3、更改当前的工作目录

函数声明如下:

int chdir(const char *path);

返回值:成功返回0,失败返回-1

path:新的工作目录

4、重设文件权限掩码

函数声明如下:

mode_t umask(mode_t mask);

mask:掩码

注意:这个设置的掩码只影响当前进程,其余进程不受影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2194842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法笔记】二分算法原理的深度剖析

【算法笔记】二分算法原理的深度剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;算法笔记 文章目录 【算法笔记】二分算法原理的深度剖析前言一.二分查找1.1题目1.2朴素二分1.3细节问题1.4代码实现1.5朴素模版总结 二.在排序数组中查找…

用Arduino单片机制作一个简单的音乐播放器

Arduino单片机上有多个数字IO针脚&#xff0c;可以输出数字信号&#xff0c;用于驱动发声器件&#xff0c;从而让它发出想要的声音。蜂鸣器是一种常见的发声器件&#xff0c;通电后可以发出声音。因此&#xff0c;单片机可以通过数字输出控制蜂鸣器发出指定的声音。另外&#x…

视频色彩变幻剪辑:批量剪辑工具大揭秘

在视频剪辑领域&#xff0c;将视频画面添加一些色彩是一项常见需求。幸运的是&#xff0c;市面上存在多款批量剪辑工具&#xff0c;能够轻松实现这一剪辑&#xff0c;提升视频品质与观感。像视频剪辑高手一次可剪辑多个视频素材。易操作。一起来试试。 1打开“视频剪辑高手”软…

【时间之外】昔日销售大佬今求职难

目录 国庆结束 中年危机下的家庭缩影&#xff1a;昔日销售大佬今求职难 生存智慧之三大人生策略 国庆结束 今天是国庆节的最后一天假期了。 7天的大调休&#xff0c;搞得人非常疲惫&#xff0c;想想接下来还有5天的工作日&#xff0c;就觉得这个调休实在是烦人。 中年危机…

企业为什么需要MES系统?

企业为什么需要MES系统&#xff1f; 提高生产效率&#xff1a; MES系统能够实时采集生产现场的数据&#xff0c;并根据这些数据对生产计划进行动态调整&#xff0c;最大化设备利用率和产能。通过优化生产流程&#xff0c;减少生产中的非增值时间&#xff0c;提高整体生产效率。…

史上最强传奇资源编辑器

支持&#xff1a;WIL WIS WZL PAK&#xff08;GOM GEE V8 LEG&#xff09; 批量修改密码、全格式转换、文件归类、资源优化、坐标调整辅助、GIF动画生成、衣服武器合成一体 资料地址&#xff1a;史上最强传奇资源编辑器 - 工具软件程序 - 51开发者联盟 - 51SF.CC

C语言文件操作(下)(28)

文章目录 前言一、文件的打开和关闭打开打开模式相对路径和绝对路径 关闭 二、文件操作正确流程三、文件顺序读写函数fopenfclosefputcfgetcfputsfgetsfprintffscanfsprintfsscanffwritefread 四、文件随机读写函数fseekftellrewind 五、文件读取结束时候的判断feofferror具体例…

关于持续输出内容的思路分享及分析

一、核心内容 &#xff08;一&#xff09;亦仁的分享 来自V先生的小密圈&#xff0c;提出做垂直领域内容持续输出的思路。很多大 v 不敢开小密圈是担心内容持续输出问题。掌握一套方法论应用于无数场景&#xff0c;就有无数案例和素材。列举 10 个铜山&#xff1a;装修风格点…

浏览器前端向后端提供服务

WEB后端向浏览器前端提供服务是最常见的场景&#xff0c;前端向后端的接口发起GET或者POST请求&#xff0c;后端收到请求后执行服务器端任务进行处理&#xff0c;完成后向前端发送响应。 那浏览器前端向后端提供服务是什么鬼&#xff1f; 说来话长&#xff0c;长话短说。我在人…

每日OJ题_牛客_组队竞赛_贪心_C++_Java

目录 牛客_组队竞赛_贪心 题目解析 C代码1 C代码2 Java代码 牛客_组队竞赛_贪心 组队竞赛_牛客笔试题_牛客网 (nowcoder.com) 描述&#xff1a; 牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个…

C语言 assert 函数 - C语言零基础入门教程

目录 一.assert 函数简介二.assert 函数使用三.assert 函数用法总结与注意事项四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.assert 函数简介 对于断言&#xff0c;相信大家都不陌生&#xff0c;大多数编程语言也都有断言这一特性。简单地讲…

力扣题11~15

题11&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 这种题目第一眼就是双循环&#xff0c;但是肯定不行滴&#xff0c;o(n^2)这种肯定超时&#xff0c;很难接受。 所以要另辟蹊径&#xff0c;我们先用俩指针&#xff08;标志位&#xff09;在最左端和最右端&am…

20241007给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Buildroot是使用ADB

20241007给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Buildroot是使用ADB 2024/10/7 17:35 缘起&#xff1a;由于荣品RD-RK3588-AHD开发板使用的是9针的USB-A口&#xff0c;没有使用EVB4默认的type C口。 因此需要拿掉fusb302的驱动/DTS配置部分。 同时&#xff0c;为了简单起见…

小红书引流的4大方法

关注▲洋洋科创星球▲一起成长&#xff01; 01 精心设计账号简介 账号简介是您小红书账号的第一印象&#xff0c;它将在您的主页上展示给所有访问者&#xff0c;一个精心编写的简介不仅能够吸引用户的注意力&#xff0c;还能有效提升用户对您内容的兴趣。 利用小红书号建立联系…

C语言文件操作(上)(27)

文章目录 前言一、为什么要用文件&#xff1f;二、什么是文件&#xff1f;程序文件数据文件文件名文件类型文件缓冲区文件指针 三、流流的概念标准流 总结 前言 C语言可以直接操作文件&#xff0c;如果你是第一次听说这个特性&#xff0c;可能会眼前一亮&#xff0c;感到惊奇  …

jwt认证课件讲解

JWT 基本概念 在用户登录后&#xff0c;我们需要在不同请求之间记录用户的登录状态&#xff0c;常用方式一般有三种&#xff1a;Cookie&#xff0c;Session和Token。 这里我们使用第三种Token令牌方式来实现认证鉴权&#xff0c;采用Json Web Token认证机制&#xff08;简称…

继电器原理及应用

目录 前言 继电器 1.继电器配图 2.继电器原理图 3.继电器的使用 1-继电器的使用意义 2-继电器使用场景 继电器的简单使用 1.使用原理及接线 2.使用思考 3.代码实现 总结 前言 我们上节已经简单了解了震动传感器的使用(不懂的直接去看&#xff1a;震动传感器)&#xff…

【单例模式】

单例模式是指在内存中只会创建且仅创建一次对象的设计模式。 一、实现方式 1. 饿汉式 在类加载的时候就创建实例&#xff0c;无论是否使用&#xff0c;实例都会被创建。优点是实现简单&#xff0c;线程安全。缺点是可能造成资源浪费&#xff0c;而程序可能不一定会使用这个实例…

21 基于51单片机的隧道车辆检测系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 以AT89C51单片机为控制核心&#xff0c;实现对隧道环境的监测。采用模块化设计&#xff0c; 共分以下几个功能模块&#xff1a; 单片机最小系统模块、电源模块、气体传感模块、和显示模块等。 通过…

Yocto - 使用Yocto开发嵌入式Linux系统_08 掌握软件包相关功能

Assimilating Packaging Support 本章介绍了解 Poky 和 BitBake 打包相关方面的关键概念。我们将了解支持的二进制包格式、共享状态缓存、包版本控制组件、如何设置和使用二进制包馈以支持我们的开发流程等。 This chapter presents the key concepts for understanding the as…