linux-守护进程daemon

news2024/11/8 18:02:26

linux-守护进程daemon

    • 代码实现 main.c
    • 运行结果

代码实现 main.c


//pName:程序名
//facility: 守护进程,输出日志类型 302页
#include<signal.h>
#include<syslog.h>
#include<fcntl.h>
static int daemon_proc = 0;
#define MAXDF 64
int test_daemon(const char* pName, int facility)
{
	int i;
	pid_t pid;

	if((pid = fork()) < 0)
	{
		return -1;
	}
	else if(pid) //主进程退出
	{
		_exit(0);
	}

	//创建新会话
	if((setsid() < 0))
	{
		return;
	}

	//屏蔽终端挂断的消息
	signal(SIGHUP,SIG_IGN);

	//子进程再fork一次
	//防止子进程变成新会话的守进程,当没终端的会话打开终端时,终端最后会变成会话守进程的终端
	//为了确保守护进程将来打开终端时也不会获得终端
	if((pid = fork()) < 0)
	{
		return -1;
	}
	else if(pid) 
	{
		_exit(0);
	}

	//标识当前程序是否是守护进程
	daemon_proc = 1;

	//修改工作目录到根目录
	chdir("/"); 

	//关闭文件描述符号
	for(int i=0; i<MAXDF; ++i)
	{
		close(i);
	}
	//指定 stdin stdout strerror的日志输出目录
	//每个文件都属于自己的句柄,例如标准输入是0,标准输出是1,标准出错是2
	//打开0 1 2 防止 创建socket时被占用
    int p1 = open("/dev/NULL",O_RDONLY);
	int p2 = open("/dev/NULL",O_RDWR);
	int p3 = open("/dev/NULL",O_RDWR);

	//输出的日志内容在:/var/log/message 中
	openlog(pName,LOG_PID,facility); 
	syslog(LOG_DEBUG, "daemon create\r\n");
	return 0;
}

int main(int argc, char **argv)
{
	test_daemon("test_daemon",0);
	while(1)
	{
		syslog(LOG_DEBUG, "daemon test\r\n");
	}
	return 0;
}


运行结果

在这里插入图片描述

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

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

相关文章

AQS理解

AQS是JAVA中的一组抽象类&#xff0c;就是为了解决多线程并发竞争共享资源而引发的线程安全问题&#xff0c;细致点说AQS就是具备一套线程阻塞等待以及被唤醒的时候锁分配的机制&#xff0c;这个机制是由队列来实现的&#xff0c;暂时获取不到所的线程加入到队列里面&#xff0…

爬虫/scrapy基础

如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏一键三连支持以下哦&#xff01; 想要一起交流学习的小伙伴可以加zkaq222&#xff08;备注CSDN&#xff0c;不备注通不过哦&#xff09;进入学习&#xff0c;共同学习进步 目录 0x01 安装和简介 0x02 文件作用 0x04 保存…

【软考-中级】系统集成项目管理工程师-合同管理历年案例

持续更新。。。。。。。。。。。。。。。 目录 2018 下 试题一(17分)系列文章 2018 下 试题一(17分) 阅读下列说明&#xff0c;回答问题 1至问题 3&#xff0c;将解答填入答题纸的对应栏内     某大型央企 A 公司计划开展云数据中心建设项目&#xff0c;并将公司主要业务应…

OpenGL —— 2.8、漫游之摄像机飞行移动(附源码,glfw+glad)

源码效果 C源码 纹理图片 需下载stb_image.h这个解码图片的库&#xff0c;该库只有一个头文件。 具体代码&#xff1a; vertexShader.glsl #version 330 corelayout(location 0) in vec3 aPos; layout(location 1) in vec2 aUV;out vec2 outUV;uniform mat4 _modelMatrix; …

智慧公厕蜕变多功能城市智慧驿站公厕的创新

随着城市发展的不断推进&#xff0c;对公共设施的便利性和智能化要求也日益提高。为满足市民对高品质、便捷、舒适的公共厕所的需求&#xff0c;智慧公厕行业的领航厂家广州中期科技有限公司&#xff0c;全新推出了一体化智慧公厕驿站。凭借着“高科技碳中和物联网创意设计新经…

widnows安装audiocraft

audiocraft介绍 AudioCraft是一个PyTorch库&#xff0c;用于音频生成的深度学习研究。我们可以上传一段音乐&#xff0c;AI会根据音乐以及提示词&#xff0c;生成一段新的音乐。下面来看看具体安装。 首先查看cuda版本 如何安装cuda&#xff0c;可以自行搜索 获取程序 可…

泛微OA E-Office V10 OfficeServer 任意文件上传漏洞复现

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 漏洞简介 泛微e-ofice是一款标准化的协同0A办公软件&#xff0c;泛微 …

书单|1024程序员狂欢节充能书单!

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

双指针——快乐数

一, 题目要求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 …

工程中的SOVD——从ECU到车辆

SOVD标准正在改变诊断方式&#xff0c;特别是在互联网上当多个合作方进行交互时&#xff0c;其提供了很大的优势。在开发的早期阶段&#xff0c;需要使用附加的方法来利用这个标准&#xff0c;因为该标准并不是专为ECU诊断而开发的&#xff0c;而且还需格外注意数据的处理&…

金融统计学方法:神经网络

目录 1.神经网络 2.深度神经网络 3.案例分析 1.神经网络 神经网络是模仿人脑神经元工作原理而设计的一种算法模型。在一个基本的神经网络中&#xff0c;存在多个“神经元”或称为“节点”&#xff0c;这些节点被组织成多个层次。每个节点都接收前一层的输入&#xff0c;进行…

基于Python实现的一个通用的二进制数据分析工具源码,分析任意格式的二进制数据,还能同时查看协议文档

这是一个通用的二进制数据分析工具。 它能做什么 分析任意格式的二进制数据&#xff0c;还能同时查看协议文档逐字节、逐位分析手动、自动分析对分析结果建透视图&#xff0c;发现规律&#xff0c;学习协议 怎么做到的 工具以插件化方式扩展协议的支持定义了易用的API供插件…

【vue3】踩坑日记,vite与node版本对应(mac环境)

创建vue3vitets项目时&#xff0c;报错The requested module ‘vue’ does not provide an export named ‘computed’&#xff1b; node版本问题&#xff0c; Vite 需要 Node.js 版本 14.18&#xff0c;16&#xff1b; 升级node版本步骤&#xff1a; 先查看node的版本&#…

qt配置halcon环境实现读入图像显示

首先&#xff0c;在Halcon里面写流程。 *读入图像 read_image (Image, cat) *获取图片大小 get_image_size (Image, Width, Height) *设置适应大小显示 dev_set_part (0, 0, Height-1, Width-1) *显示图像 dev_display (Image) 菜单栏的文件->导出程序备用。 QT新建工程&a…

Jmeter测试关联接口

Jmeter用于接口测试时&#xff0c;后一个接口经常需要用到前一次接口返回的结果&#xff0c;本文主要介绍jmeter通过正则表达式提取器来实现接口关联的方式&#xff0c;可供参考。 一、实例场景&#xff1a; 有如下两个接口&#xff0c;通过正则表达式提取器&#xff0c;将第一…

小白学习c++的的第一节课

初识c 目录&#xff1a;一、c关键字(c98)二、命名空间2.1 命名空间的定义2.2 命名空间的使用 三、c输入与输出四、缺省参数五、函数重载六、引用6.1引用特性6.2常引用6.3使用场景6.4传值和传引用效率比较6.5引用和指针的区别 七、内联函数7.1 概念7.2特性 八、auto关键字&…

Mock 测试详解:什么是 Mock 测试

Mock测试 什么是 Mock &#xff1f; Mock 的意思就是&#xff0c;当你很难拿到源数据时&#xff0c;你可以使用某些手段&#xff0c;去获取到跟源数据相似的假数据&#xff0c;拿着这些假数据&#xff0c;前端可以先行开发&#xff0c;而不需要等待后端给了数据后再开发。 Mo…

通过尖端技术创造价值:释放生成式 AI 的力量

塔曼纳 一、说明 近年来&#xff0c;世界见证了人工智能&#xff08;AI&#xff09;的重大进步&#xff0c;生成式AI是最具革命性的技术之一。生成式人工智能已成为一种强大的方法&#xff0c;使机器能够创建新的原创内容&#xff0c;使其成为不同行业各种应用背后的驱动力。在…

An Embarrassingly Easy but Strong Baseline for Nested Named Entity Recognition

原文链接&#xff1a; https://aclanthology.org/2023.acl-short.123.pdf ACL 2023 介绍 问题 基于span来解决嵌套ner任务的范式&#xff0c;大多都是先对span进行枚举&#xff0c;然后对每个span进行分类&#xff0c;实际就是得到一个分数矩阵&#xff0c;矩阵中每个元素表示一…

uniapp map地图实现marker聚合点,并点击marker触发事件

1.uniapp官方文档说明 2.关键代码片段 // 仅调用初始化&#xff0c;才会触发 on.("markerClusterCreate", (e) > {})this._mapContext.initMarkerCluster({enableDefaultStyle: false, // 是否使用默认样式zoomOnClick: true, // 点击聚合的点&#xff0c;是否…