【全志H616开发】Linux守护进程

news2025/1/11 5:56:21

文章目录

  • 守护进程
    • 简介
    • 基本特点
    • 创建一个守护进程通常涉及以下步骤:
    • 进程查看指令:
  • 守护进程开发
    • 代码示例:
  • 开机自动启动

守护进程

简介

  • Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行

  • 某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。

  • Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、

  • web服务器httpd、邮件服务器sendmail和数据库服务器 mysqld等。

  • 守护进程的名称通常以d结尾UDEV守护进程,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。

比如:UDEV守护进程,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。

基本特点

  1. 生存周期长[非必须],一般操作系统启动的时候就启动,关闭的时候关闭。
  2. 守护进程和终端无关联,也就是他们没有控制终端,所以当控制终端退出,也不会导致守护进程退出
  3. 守护进程是在后台运行,不会占着终端,终端可以执行其他命令
  4. 一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程

linux操作系统本身是有很多的守护进程在默默执行,维持着系统的日常活动。大概30-50个

创建一个守护进程通常涉及以下步骤:

  1. 在后台运行:使用fork系统调用创建一个子进程,然后父进程退出,子进程继续运行。
  2. 脱离控制终端:调用setsid函数创建一个新的会话,使进程成为会话领导,并脱离控制终端。
  3. 重定向标准输入/输出/错误:将标准输入/输出/错误重定向到/dev/null,避免使用终端设备。
  4. 改变工作目录:将工作目录改为根目录/,避免占用挂载的文件系统。
  5. 文件权限掩码:将文件权限掩码设置为0,以确保守护进程创建的文件具有预期的权限。

进程查看指令:

ps:Process Status 的缩写,是一个用来报告当前系统中进程的状态的命令。

-e:显示所有进程的信息。
-f:显示完整的进程树,包括父进程 ID (PPID) 和环境变量等附加信息。

ps -ef 命令详解:

输出格式: 当你运行 ps -ef 命令时,输出的每一行代表一个进程,并且每一列包含以下信息:
USER:进程的所有者。
PID:进程 ID。
PPID:父进程 ID。
C:CPU 使用百分比(在某些系统中可能不显示)。
STIME:进程启动时间。
TTY:与进程关联的终端设备。
TIME:进程使用的 CPU 时间总和。
CMD:命令名称和参数。
在这里插入图片描述

说明:

  • PPID = 0:内核进程,跟随系统启动而启动,生命周期贯穿整个系统。
  • CMD列中:名字带[]这种,叫内核守护进程。
  • 老祖init:也是系统守护进程,它负责启动各运行层次特定的系统服务;所以很多进程的PPID是init,也负责收养孤儿进程。
  • CMD列中:名字不带[]的普通守护进程(用户集守护进程)。

查看udev进程:

	ps -ef|grep udev|grep -v grep  //grep -v grep 是略过grep进程

可以看到udev的守护进程(守护进程名通常以d结尾):
在这里插入图片描述

守护进程开发

直接借助damon()函数完成。

#include <unistd.h>
int daemon(int nochdir, int noclose);

函数参数:

  • nochdir:为0时表示将当前目录更改至“/”
  • noclose:为0时表示将标准输入、标准输出、标准错误重定向至“/dev/null” 返回值:

成功则返回0,失败返回-1

功能描述:创建一个守护进程,守护进程一直在“守护”一个不断向daemon.log 的文件中写入当前的日期时间。当守护进程接受到SIGQIUT指令后就会退出进程。

代码示例:

#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdbool.h>

//C 库函数 char *asctime(const struct tm *timeptr) 返回一个指向字符串的指针,它代表了结构体struct timeptr 的日期和时间。
//C 库函数 struct tm *localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示。
/*
   struct tm {
   int tm_sec;        
   秒,范围从 0 到 59                
   int tm_min;        
   分,范围从 0 到 59                
   int tm_hour;       小时,范围从 0 到 23              
   int tm_mday;       一月中的第几天,范围从 1 到 31                  
   int tm_mon;        月份,范围从 0 到 11              
   int tm_year;       自 1900 起的年数              
   int tm_wday;       一周中的第几天,范围从 0 到 6               
   int tm_yday;       一年中的第几天,范围从 0 到 365                   
   int tm_isdst;      夏令时                       
   };
   */
static bool flag = true;

void handler(int sig)
{
	printf("I got a signal %d\nI'm quitting.\n", sig);
	flag = false;
}

int main()
{
	time_t t;
	int fd;
	//创建守护进程
	if(-1 == daemon(0, 0))
	{
		printf("daemon error\n");
		exit(1);
	}

	//设置信号处理函数
	struct sigaction act;
	act.sa_handler = handler;
	sigemptyset(&act.sa_mask);
	act.sa_flags = 0;
	if(sigaction(SIGQUIT, &act, NULL))
	{
		printf("sigaction error.\n");
		exit(0);
	}
	//进程工作内容
	while(flag)
	{
		fd = open("/home/orangepi/daemon.log", O_WRONLY | O_CREAT | O_APPEND, 
				0644);
		if(fd == -1)
		{
			printf("open error\n");
		}
		t = time(0);
		char *buf = asctime(localtime(&t));
		write(fd, buf, strlen(buf));
		close(fd);
		sleep(10);
	}
	return 0;
}

执行自己创建的守护进程:可以看出它独立于终端

在这里插入图片描述
可以看到a.out守护进程确实在跑,当我们为它发送SIGQUIT信号后,shouhu守护进程就退出了
在这里插入图片描述
daemon.log
在这里插入图片描述

开机自动启动

打开sudo vi /etc/rc.local添加绝对路径加程序名字
例如在这里插入图片描述
然后重启测试

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

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

相关文章

C语言斜向钥匙迷宫

目录 开头程序的流程图程序的效果结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来看一下我用C语言编译的斜向钥匙迷宫和与之相关的一些东西。 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> void printmaze(co…

数据结构算法-排序(二)

插入排序 插入排序核心 假设数组中的一部数据已经排好序&#xff0c;要插入的数据和这些数据进行比较&#xff0c;直到找到合适的位置插入新数据。 插入排序步骤 插入排序主要有以下步骤构成&#xff1a; 假设有序&#xff0c;我们假设**a[0]**已经排好序待插入的数据为a[j]…

Windows蓝屏问题解决(电脑只要安装了VPN_SV独立客户端)必蓝屏

一、SERNEL_SECURITY_CHECK_FAILURE (139) 蓝屏分析 官方介绍蓝屏现象&#xff0c;官方Windows为了保护电脑&#xff0c;出现故障&#xff0c;自动蓝屏&#xff0c;避免损坏电脑的一种现象&#xff0c;别名buckcheck、蓝屏。 100%复现软件&#xff1a;天融信VPN&#xff0c;同事…

AI赋能交通治理:非机动车监测识别技术在城市街道安全管理中的应用

引言 城市交通的顺畅与安全是城市管理的重要组成部分。非机动车如自行车、电动车、摩托车等在城市交通中扮演着重要角色&#xff0c;但同时也带来了管理上的挑战。尤其是在机动车道上误入非机动车的现象&#xff0c;不仅影响交通秩序&#xff0c;还可能引发交通事故。思通数科…

C#插件 调用存储过程(输出参数类型)

存储过程 CREATE PROCEDURE [dbo].[GetSum]num1 INT,num2 INT,result INT OUTPUT AS BEGINselect result num1 num2 END C#代码 using Kingdee.BOS; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Util; using System; using System.…

3分钟认识KTX2纹理

作者&#xff1a;游梦 图片与纹理区别 日常沟通中通常把图片与纹理混为一谈&#xff0c;实际在图形学中&#xff0c;它俩是严格意义上的两个对象&#xff0c;主要有以下两个方面的区别&#xff1a; 文件格式&#xff1a; 图片&#xff1a;JPG、JPEG、PNG、bmp、webp、SVG等常…

gstreamer 配置+解析编解码

一. 安装gstreamer 1.1 Windows下安装 官网链接&#xff1a;https://gstreamer.freedesktop.org/download/#windows 两个都要下载。安装的时候&#xff0c;在custom选择安装路径。然后返回上一步选择complete完全安装&#xff0c;两个安装方式一样。 1.2 配置环境 将 D:\…

python3 pyside6图形库学习笔记及实践(二)

目录 前言常用控件下拉框(QComboBox)复选框(QCheckBox)单选框(QRadioButton)文本框(QTextEdit和QPlainTextEdit)滑块(QSlider) 布局常见布局控件示例布局的好处 对话框消息框(QMessageBox)输入对话框(QInputDialog)文件对话框(QFileDialog)字体对话框(QFontDialog)颜色对话框(Q…

一文精通Python print函数的N种玩法

文末赠免费精品编程资料~~ 今天我们要探索的是编程世界中最常被忽略的英雄——print函数。别看它简单&#xff0c;其实藏着不少有趣的玩法和高级技巧&#xff0c;能让你的代码更加灵活和高效。准备好了吗&#xff1f;让我们一起深入这个看似平凡却又不凡的功能。 基础篇&…

SuperGlue网络+FPN+SIFT(特征匹配)

SuperGlue网络+FPN+SIFT(特征匹配) 摘要1. FPNFPN具体实现思路2. SIFT2.1 尺度空间极值检测2.1.1 尺度空间2.1.2 高斯金字塔2.1.4 局部极值检测2.2 精确的关键点定位2.2.1 消除边缘响应2.2.2 确定关键点(极值点)方向2.3 关键点描述2.4 关键点匹配2.5 SIFT代码实现2.6 SIFT的…

贪心算法-买卖股票问题

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法并不保证总是能得到全局最优解&#xff0c;但它通常能得到不错的解…

新版PyTorch:AI任务加速与Intel GPU集成

--->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<--- 最近的Pytorch 2.4 推出AI任务加速&#xff0c;提供对Intel GPU的支持。为了进一步加速 AI任务&#xff0c;PyTorch 2.4现在为Intel数据中心GPU Max系列提供支持&#xff0c;该系列将Intel GPU…

Java答题系统练习模拟考试系统

&#x1f4dd;【学霸秘籍】答题系统模拟考试系统&#xff0c;你的提分神器来啦&#xff01;&#x1f680; &#x1f4da; 开篇引入&#xff1a;学习路上的得力助手 嘿&#xff0c;小伙伴们&#xff01;是不是又在为即将到来的考试焦头烂额&#xff1f;&#x1f623; 是不是觉…

二分查找(多版本)

1.基础版 public class erfenchazhao {public int test(int arr[],int target){int i 0; //定义左指针int j arr.length-1;//定义右指针int m; //定义中间值while(i<j){ //判断条件m (ij)>>>1;if(target < arr[m]){ //目标值在左边j m - 1;}else…

【python】在Python代码中执行Linux命令的详细用法教程

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

昇思25天学习打卡营第01天|昇思MindSpore大模型基础介绍

昇思MindSpore和华为昇思MindSpore大模型学习打卡系列文章&#xff0c;本文仅供参考~ 文章目录 前言一、昇思MindSpore是什么&#xff1f;二、执行流程三、设计理念四、层次结构五、Huawei昇腾AI全栈 前言 随着计算机大模型的不断发展&#xff0c;Ai这门技术也越来越重要&#…

免费【2024】springboot 宠物领养救助平台的开发与设计

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

Prozyme糖样本检测平台--GlykoPrep® Rapid N-Glycan Preparation with APTS

单克隆抗体已成为生物制药行业具有潜力的新兴蛋白候选药物。其药物研发流程包括一系列精细的控制和评估步骤&#xff0c;需要仔细、严格地监测目标化合物的治疗稳定性及有效性。因此&#xff0c;在商业化前的每个阶段对单克隆抗体进行全面表征是极其有益的。在大量研究成熟的蛋…

用Python打造精彩动画与视频,3.1 安装和设置 MoviePy

第3章 开始你的第一个视频项目 MoviePy 3.1 安装和设置 MoviePy 视频处理在多媒体内容创作中起着至关重要的作用。MoviePy 是一个用于视频编辑的 Python 库&#xff0c;它可以让你轻松地进行视频剪辑、合并、特效添加等操作。通过 MoviePy&#xff0c;你可以用简单的 Python…

基于Java+SpringBoot+Vue的的课程作业管理系统

前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 哈喽兄弟们&#xff0c;好久不见哦&#xff5…