守护进程
目录
守护进程
前台进程 后台进程
session(进程会话)
前台任务和后台任务比较好
本质
绘画和终端都关掉了,那些任务仍然在
bash也退了,然后就托孤了
编辑
守护进程化---不想受到任何用户登陆和注销的影响编辑
如何做到(setsid)(创建新会话)
怎么保证自己不是组长
守护进程本质(孤儿进程)
守护进程忽略的几个信号和含义
1. SIGHUP (Hangup signal)
2. SIGINT (Interrupt signal)
3. SIGTERM (Termination signal)
4. SIGQUIT (Quit signal)
5. SIGCHLD (Child terminated signal)
6. SIGPIPE (Broken pipe signal)
为什么守护进程忽略这些信号?
如何在 C/C++ 中忽略信号?
总结:
代码
网络服务器以守护进程运行
/dev/null,垃圾桶
dup2重定向到/dev/null
编辑
测试:启动后直接终止了,变成后台了
检查是否起来了netstat -nltp
ps ajx |head -1 && ps ajx |grep tcpserver
查看工作目录ls /proc/644717 -l
编辑
ls /proc/644717/fd -l
编辑
把xshell关闭了,服务仍然在
再打开一个xshell就等于重新启动一个会话,还能看到tcpserver进程在运行
编辑
更改目录到根目录
编辑
把服务器进程关闭掉kill -9 PID
把打印的放进日志文件
守护进程函数daemon,上面的是模拟
daemon() 函数的定义
参数:
返回值:
daemon() 的作用
守护进程的常见步骤
使用 daemon() 示例
代码解析:
daemon() 与 setsid() 和 fork() 的比较
使用守护进程时的注意事项
总结
守护进程
前台进程 后台进程
后台进程不能标准输入
3个后台进程了
把2号任务提到前台进程
ctrl c终止前台进程
把任务提到前台进程,后悔了,再重新放回后台
ctrl z就可以暂停,然后系统自动把bash提到前台
bg 3再把3号进程启动起来
session(进程会话)
在Linux中,session
(会话)通常指的是与用户交互的一个环境,它是系统中与某个用户交互的一系列活动的集合。会话在Linux系统中有多种用途,下面是几种常见的会话类型及其相关概念:
1. 登录会话(Login Session)
当用户通过登录界面(如终端或图形界面)登录到系统时,系统会为该用户创建一个会话。登录会话包括:
-
用户身份验证(通过用户名和密码等方式)。
-
运行用户的默认Shell(例如
bash
)。 -
用户环境变量的设置(例如
$PATH
、$HOME
等)。
这种会话通常由登录管理器(如login
、sshd
或gdm
等)管理。当用户退出登录时,该会话会结束。
2. 进程会话(Process Session)
在Linux中,每个进程都有一个会话(Session),这个会话由session leader
(会话领导进程)控制。进程会话的特征包括:
-
每个进程在启动时都会被分配一个会话ID。
-
会话通常由一个进程创建,称为会话领导进程。
-
会话通常用于进程组管理,特别是在控制终端和后台进程之间的交互。
会话的管理由setsid()
系统调用进行,当进程调用setsid()
时,它会创建一个新的会话,并成为该会话的领导进程
前台任务和后台任务比较好
本质
任务里有多个进程组
每多建一个就多一个
绘画和终端都关掉了,那些任务仍然在
bash也退了,然后就托孤了
受到了用户登录和退出的影响
守护进程化---不想受到任何用户登陆和注销的影响
如何做到(setsid)(创建新会话)
怎么保证自己不是组长
守护进程本质(孤儿进程)
守护进程忽略的几个信号和含义
在 C/C++ 中,守护进程通常会忽略一些信号,确保其在后台继续运行,而不被用户的操作或其他系统事件干扰。除了常见的信号外,SIGPIPE
也是一个重要的信号,守护进程通常会忽略它。以下是几个常见的守护进程忽略的信号及其作用,包括 SIGPIPE
:
1. SIGHUP (Hangup signal)
- 作用:最初用于通知进程,终端连接已经断开。对于守护进程来说,接收到 SIGHUP 信号通常意味着该进程应重新加载其配置文件。
- 守护进程行为:守护进程通常会忽略 SIGHUP 信号,这样即使终端连接断开,进程也会继续运行。
2. SIGINT (Interrupt signal)
- 作用:通常由用户通过键盘操作(Ctrl+C)发送,用来中断进程的执行。
- 守护进程行为:守护进程会忽略 SIGINT 信号,避免被用户的键盘中断。
3. SIGTERM (Termination signal)
- 作用:请求进程终止的信号。系统或其他进程通常会发送此信号来请求进程优雅地结束。
- 守护进程行为:尽管守护进程有时会捕获 SIGTERM 信号并优雅地退出,但它也可能选择忽略该信号,或者采取一些特定的清理操作后继续运行。
4. SIGQUIT (Quit signal)
- 作用:通常由用户通过 Ctrl+\ 发送,用来终止进程并生成核心转储文件。
- 守护进程行为:守护进程通常会忽略 SIGQUIT 信号,以避免被意外终止并生成不必要的核心转储文件。
5. SIGCHLD (Child terminated signal)
- 作用:当子进程结束时,父进程会收到 SIGCHLD 信号,通常用于处理子进程的退出状态。
- 守护进程行为:守护进程可能会忽略 SIGCHLD 信号,特别是当它不需要对子进程的退出状态进行处理时。
6. SIGPIPE (Broken pipe signal)
- 作用:当一个进程向一个已经关闭的管道或套接字写入数据时,操作系统会发送 SIGPIPE 信号给该进程。
- 守护进程行为:守护进程通常会忽略 SIGPIPE 信号。这是因为如果进程尝试向一个已经关闭的管道或套接字写入数据,默认情况下会导致进程终止。通过忽略 SIGPIPE 信号,守护进程可以避免因意外的关闭管道而终止,通常这种情况下进程会返回一个错误代码,而不是被强制终止。
为什么守护进程忽略这些信号?
守护进程的设计目标是长时间稳定地在后台运行,因此它们通常需要避免因为用户的操作(如 Ctrl+C)、系统的请求(如终止信号)或其他不必要的信号而中断。忽略这些信号有助于确保进程不被意外终止,可以持续运行。
如何在 C/C++ 中忽略信号?
在 C/C++ 中,您可以使用 signal()
函数来捕获或忽略信号。若要忽略一个信号,可以将信号处理程序设置为 SIG_IGN
。例如:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>int main() {// 忽略 SIGHUP, SIGINT, SIGPIPEsignal(SIGHUP, SIG_IGN); // 忽略 SIGHUPsignal(SIGINT, SIG_IGN); // 忽略 SIGINTsignal(SIGPIPE, SIG_IGN); // 忽略 SIGPIPE// 守护进程的逻辑while (1) {// 模拟工作sleep(1);}return 0;
}
总结:
- SIGHUP: 通常用于通知终端连接断开,守护进程会忽略它。
- SIGINT: 用户通过 Ctrl+C 发送的中断信号,守护进程会忽略它。
- SIGTERM: 请求进程终止,守护进程有时会忽略它,或者捕获后进行清理操作。
- SIGQUIT: 用户通过 Ctrl+\ 发送的信号,守护进程会忽略它。
- SIGCHLD: 子进程退出时发送的信号,守护进程可能会忽略它。
- SIGPIPE: 管道或套接字关闭时发送的信号,守护进程会忽略它,避免进程被意外终止。
通过忽略这些信号,守护进程能够在后台稳定运行,避免不必要的中断或退出。
代码
先忽略几个常见信号
#pragma once
#include<iostream>
#include<cstdlib>
#include<unistd.h>
#include<signal.h>
#include<string>using namespace std;void Daemon(const string &cwd = "")
{//1.忽略其他异常信号signal(SIGCLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);//2.将自己变成独立的会话if(fork() > 0){exit(0);}setsid();//3.g更改当前目录if(!cwd.empty()){chdir(cwd.c_str());//更改当前目录}}
网络服务器以守护进程运行
/dev/null,垃圾桶
dup2重定向到/dev/null
Daemon.hpp
#pragma once
#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;const string nullfile = "/dev/null";void Daemon(const string &cwd = "")
{// 1.忽略其他异常信号signal(SIGCLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);// 2.将自己变成独立的会话if (fork() > 0){exit(0);}setsid();// 3.g更改当前目录if (!cwd.empty()){chdir(cwd.c_str()); // 更改当前目录}// 4.有打印的,标准输出标准输入的,所以要把表示输入,标准输出,标准错误重定向至/dev/null// 标准错误一般要打印到日志文件,不要打印到屏幕int fd = open(nullfile.c_str(), O_RDWR);//读写方式打开if(fd > 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}}
测试:启动后直接终止了,变成后台了
检查是否起来了netstat -nltp
ps ajx |head -1 && ps ajx |grep tcpserver
自成进程组,自成会话
查看工作目录ls /proc/644717 -l
还在当前目录
ls /proc/644717/fd -l
把xshell关闭了,服务仍然在
再打开一个xshell就等于重新启动一个会话,还能看到tcpserver进程在运行
更改目录到根目录
把服务器进程关闭掉kill -9 PID
把打印的放进日志文件
守护进程函数daemon,上面的是模拟
在 C/C++ 中,daemon()
函数用于创建守护进程(daemon)。守护进程通常是系统后台运行的进程,通常没有控制终端,并且可以在系统启动时自动启动或在用户退出登录时保持运行。守护进程会与控制终端断开连接,通常用于执行长期运行的任务。
daemon()
函数的定义
daemon()
函数通常在 <unistd.h>
中声明,原型如下:
#include <unistd.h>int daemon(int nochdir, int noclose);
参数:
nochdir
: 如果设置为0
,守护进程将在启动时改变当前工作目录为根目录(/
)。这是因为守护进程一般不希望占用当前工作目录,并防止在程序退出时当前工作目录被锁定。如果设置为1
,则守护进程的当前工作目录不会改变。noclose
: 如果设置为0
,守护进程会关闭标准输入、标准输出和标准错误输出(stdin
,stdout
,stderr
)。通常这是守护进程的行为,以防它继续与终端交互。如果设置为1
,守护进程将不会关闭这些文件描述符。
返回值:
- 成功时,返回
0
。 - 出错时,返回
-1
,并将errno
设置为具体的错误值。
daemon()
的作用
daemon()
函数执行以下操作:
- 分离进程:它使进程脱离控制终端,成为一个守护进程。
- 改变工作目录:它将工作目录切换到根目录
/
,以确保守护进程不会阻止文件系统的卸载。 - 关闭文件描述符:它关闭进程的标准输入、标准输出和标准错误输出,通常会将这些文件描述符重定向到某个日志文件或
/dev/null
。
守护进程的常见步骤
通常,守护进程的创建步骤包括:
- 调用
fork()
创建子进程,父进程退出。 - 调用
setsid()
创建新会话并脱离终端。 - 调用
daemon()
或手动设置工作目录并关闭文件描述符。
使用 daemon()
示例
下面是一个简单的 C 程序示例,演示如何使用 daemon()
创建守护进程:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main() {// 调用 daemon() 创建守护进程if (daemon(0, 0) == -1) {perror("daemon failed");exit(EXIT_FAILURE);}// 守护进程在后台执行任务while (1) {// 模拟后台任务// 这里可以执行长期运行的任务,如定时备份、日志记录等sleep(60); // 每分钟执行一次}return 0;
}
代码解析:
daemon(0, 0)
:将守护进程从终端脱离,改变当前工作目录到根目录,并关闭标准输入、标准输出和标准错误输出。这个调用会将进程转为守护进程。sleep(60)
:模拟守护进程在后台执行任务,每分钟执行一次。
daemon()
与 setsid()
和 fork()
的比较
在手动创建守护进程时,通常会使用 fork()
和 setsid()
来脱离终端并创建一个新的会话。然而,daemon()
函数将这些步骤封装在一个调用中,因此可以更方便地创建守护进程。基本上,daemon()
做了以下几件事:
- 创建一个子进程,父进程退出。
- 调用
setsid()
创建新会话并使进程脱离终端。 - 改变工作目录到根目录。
- 关闭标准输入、输出、错误输出。
使用守护进程时的注意事项
- 文件描述符:守护进程会关闭标准输入、标准输出和标准错误输出,因此在守护进程中通常需要将这些描述符重定向到
/dev/null
或某个日志文件。 - 退出状态:守护进程通常是长期运行的,退出时要考虑清理工作,如关闭打开的文件、释放资源等。
- 进程管理:可以使用进程管理工具如
systemd
或init.d
来启动和管理守护进程。
总结
daemon()
是一个用于创建守护进程的方便函数,它将一些常见的守护进程设置封装在一起。- 它脱离控制终端、改变工作目录为根目录、关闭标准输入输出等,使得进程成为一个后台独立运行的守护进程。
- 它是编写需要长期运行、无交互的后台任务程序时常用的函数。
相关文章:
守护进程
目录 守护进程 前台进程 后台进程 session(进程会话) 前台任务和后台任务比较好 本质 绘画和终端都关掉了,那些任务仍然在 bash也退了,然后就托孤了 编辑 守护进程化---不想受到任何用户登陆和注销的影响编辑 如何…...
GPON原理
GPON网络架构 对于OLT来说,它就相当于一个指挥官,它指挥PON口下的ONU在指定的时间段内发送数据以及发起测距过程等 而ONU则是一个士兵,按照OLT的指挥做出相应 而ODN它主要就是提供一个传输通道,主要包括分光器和光纤组成 对于PO…...
华三(HCL)和华为(eNSP)模拟器共存安装手册
接上章叙述,解决同一台PC上同时部署华三(HCL)和华为(eNSP)模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本,可以直接和eNSP兼容Oracle VirtualBox,而其他版本均使用Oracle VirtualBox v6以上的版本,…...
类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数
1.初始化列表 1.1作用: 通过特定的值,来初始化对象。 1.2定义: 初始化列表,就相当于定义对象(开空间)。不管写不写初始化列表,每个成员变量都会走一遍初始化列表(开出对应的空间…...
clickhouse 使用global in 优化 in查询
文章目录 in例子使用global in in例子 SELECT uniq(UserID) FROM distributed_table WHERE CounterID 101500 AND UserID IN (SELECT UserID FROM distributed_table WHERE CounterID 34)对于in 查询来说,本来查询的就是分布式表,假设这个表有100 个…...
macos 14.0 Monoma 修改顶部菜单栏颜色
macos 14.0 设置暗色后顶部菜单栏还维持浅色,与整体不协调。 修改方式如下:...
鸿蒙动画开发07——粒子动画
1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…...
Matlab 2016b安装教程附安装包下载
软件介绍 MATLAB(矩阵实验室)是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。MATLAB具有数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理、数字信…...
Container image .... already present on machine 故障排除
故障现象: Normal Pulled 12s (x2 over 15s) kubelet Container image “registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1” already present on machine kubectl get pods NAME READY STATUS RESTARTS AGE two-pod 1/2 Error …...
力扣 二叉树的层序遍历-102
二叉树的层序遍历-102 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; // 二维数组用来存储每层节点if (root nullptr)return res;queue<TreeNode*> q; // 队列用来进行层序遍历q.push(r…...
Java 平衡二叉树 判断 详解
判断平衡二叉树的详解(Java 实现) 平衡二叉树的定义: 平衡二叉树(Balanced Binary Tree)是指一棵二叉树中任意节点的左右子树高度差不超过 1。即: ∣ h e i g h t ( l e f t ) − h e i g h t ( r i g h …...
Java设计模式笔记(一)
Java设计模式笔记(一) (23种设计模式由于篇幅较大分为两篇展示) 一、设计模式介绍 1、设计模式的目的 让程序具有更好的: 代码重用性可读性可扩展性可靠性高内聚,低耦合 2、设计模式的七大原则 单一职…...
【人工智能学习之yolov8改进的网络怎么指定规模】
yolov8改进的网络怎么指定规模 在你更换主干网络或者做了其他修改之后,发现模型总是默认使用的n规模,而n规模有可能无法完成任务,怎么办呢,有什么办法指定规模大小呢? WARNING ⚠️ no model scale passed. Assuming …...
网络安全概述
网络安全 物理安全 网络的物理安全是整个网络系统安全的前提。在 校园网工程建设中,由于网络系统属于 弱电工程,耐压值很低。因此,在 网络工程的设计和施工中,必须优先考虑保护人和 网络设备不受电、火灾和雷击的侵害࿱…...
[MySQL#2] 库 | 表 | 详解CRUD命令 | 字符集 | 校验规则
目录 一. 库操作 1. 创建数据库 2. 字符集和校验规则 校验规则对数据库的影响 显示创建数据库时对应的命令 3. 修改数据库 4. 数据库删除 备份和恢复 还原 查看连接情况 二. 表操作 1. 创建表(定义实例化格式 2. 创建表案例 (实例化数据类型…...
【Unity基础】如何查看当前项目使用的渲染管线?
在 Unity 中,你可以通过以下几种方式查看当前项目使用的是哪个渲染管线: 1. 检查 Graphics Settings 打开 Unity 编辑器,进入顶部菜单:Edit → Project Settings → Graphics。在 Graphics Settings 窗口中,找到 Scr…...
什么是域名监控?
域名监控是持续跟踪全球域名系统(DNS)中变化以发现恶意活动迹象的过程。组织可以对其拥有的域名进行监控,以判断是否有威胁行为者试图入侵其网络。他们还可以对客户的域名使用这种技术以执行类似的检查。 你可以将域名监控比作跟踪与自己实物…...
apache中的Worker 和 Prefork 之间的区别是什么?
文章目录 内存使用稳定性兼容性适用场景 Apache中的Worker和Prefork两种工作模式在内存使用、稳定性以及兼容性等方面存在区别 内存使用 Worker:由于使用线程,内存占用较少。Prefork:每个进程独立运行,内存消耗较大。 稳定性 W…...
解决SSL VPN客户端一直提示无法连接服务器的问题
近期服务器更新VPN后,我的win10电脑一致无法连接到VPN服务器, SSL VPN客户端总是提示无法连接到服务端。网上百度尝试了各种方法后,终于通过以下设置方式解决了问题: 1、首先,在控制面板中打开“网络和共享中心”窗口&…...
网络基础概念
1.网络协议 网络协议是一组标准和规则,用于定义电子设备如何在网络上通信。这些规则涵盖了数据如何格式化,传输,路由以及接收。网络协议确保了不同制造商的设备能够相互理解和交换数据 协议分层 协议也是软件,在设计上为了更好…...
sunshine和moonlight串流网络丢失帧高的问题(局域网)
注:此贴结果仅供参考 场景环境:单身公寓 路由器:2016年的路由器 开始:电脑安装sunshine软件,手机安装moonlight软件开始串流发现网络丢失帧发现巨高 一开始怀疑就是路由器问题,因为是局域网,而…...
远程视频验证如何改变商业安全
如今,商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力,但…...
CTO 实际上是做什么的?
https://vadimkravcenko.com/shorts/what-cto-does/ 有刪節 本文旨在为软件工程师解密CTO的角色,并为那些渴望担任这一职位的人提供路线图。 “他们是技术团队与公司其他部门之间的桥梁,确保技术支持并推动业务发展。” CTO的角色经常被误解。CTO有时是…...
【软考速通笔记】系统架构设计师④——系统工程基础知识
文章目录 一、前言二、系统工程方法2.1 霍尔的三维结构2.2 切克兰德法2.3 并行工程2.4 综合集成法 三、系统工程生命周期四、系统生命周期方法五、系统性能5.1 计算机的性能指标5.2 路由器的性能指标5.3 交换机的性能指标5.4 网络的性能资料5.5 操作系统的性能指标5.6 数据库的…...
2024赣ctf-web -wp
1.你到底多想要flag??? 首先来解决第一关: 先了解一下stripos(); 并且此函数处理数组返回false。而且pre_match同样遇见数组是返回false(解释一下正则 i:这是正则表达式的修饰符,代表“不区…...
Android Framework AudioFlinge 面试题及参考答案
目录 请解释什么是 AudioFlinger? AudioFlinger 在 Android 系统中的位置是什么? AudioFlinger 的主要职责有哪些? AudioFlinger 如何管理音频流? 在 AudioFlinger 中,什么是音频会话? 请简述 AudioFlinger 的工作流程。 AudioFlinger 是如何与硬件交互的? 在 A…...
英语知识在线平台:Spring Boot技术应用
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
Qt5.14.2的安装与环境变量及一些依赖库的配置
目录 1.Qt5.14.2安装 2.Qt环境变量及一些依赖库的配置 1.Qt5.14.2安装 QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 - 博客园 2.Qt环境变量及一些依赖库的配置 假设QT安装目录为: D:\Qt\Qt5.14.2 将目录: D:\Qt\Qt5.14.…...
2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析
一、单选题 1、下面代码运行后出现的图像是?( ) import matplotlib.pyplot as plt import numpy as np x np.array([A, B, C, D]) y np.array([30, 25, 15, 35]) plt.bar(x, y) plt.show() A. B. C. D. 正确答案:A 答案…...
go编程中yaml的inline应用
下列代码,设计 Config 和 MyConfig 是为可扩展 Config,同时 Config 作为公共部分可保持变化。采用了匿名的内嵌结构体,但又不希望 yaml 结果多出一层。如果 MyConfig 中的 Config 没有使用“yaml:",inline"”修饰,则读取…...
Springboot自带注解@Scheduled实现定时任务
基于Scheduled注解实现简单定时任务 原理 Spring Boot 提供了Scheduled注解,通过在方法上添加此注解,可以方便地将方法配置为定时任务。在应用启动时,Spring 会自动扫描带有Scheduled注解的方法,并根据注解中的参数来确定任务的…...
VSCode【下载】【安装】【汉化】【配置C++环境(超快)】(Windows环境)
目录 一、VSCode 下载 & 安装 二、VSCode 汉化 三、VSCode C配置 配置环境变量 如何验证是否成功 接着在VSCode中配置编辑 一、VSCode 下载 & 安装 VSCode 下载 & 安装-CSDN博客https://blog.csdn.net/applelin2012/article/details/144009210Download Visual St…...
【八股文】小米
文章目录 一、vector 和 list 的区别?二、include 双引号和尖括号的区别?三、set 的底层数据结构?四、set 和 multiset 的区别?五、map 和 unordered_map 的区别?六、虚函数和纯虚函数的区别?七、extern C …...
ABAP OOALV模板
自用模板,可能存在问题 一、主程序 *&---------------------------------------------------------------------* *& Report ZVIA_OO_ALV *&---------------------------------------------------------------------* REPORT ZVIA_OO_ALV.INCLUDE ZVI…...
qt QDateTime详解
1. 概述 QDateTime 是 Qt 框架中用于处理日期和时间的类。它将 QDate 和 QTime 组合在一起,提供了日期时间的统一处理方案。QDateTime 可以精确到毫秒,并支持时区处理。 2. 重要方法 构造函数: QDateTime() 构造无效的日期时间 QDateTime(const QDa…...
鸿蒙安全控件之位置控件简介
位置控件使用直观且易懂的通用标识,让用户明确地知道这是一个获取位置信息的按钮。这满足了授权场景需要匹配用户真实意图的需求。只有当用户主观愿意,并且明确了解使用场景后点击位置控件,应用才会获得临时的授权,获取位置信息并…...
决策树分类算法【sklearn/决策树分裂指标/鸢尾花分类实战】
决策树分类算法 1. 什么是决策树?2. DecisionTreeClassifier的使用(sklearn)2.1 算例介绍2.2 构建决策树并实现可视化 3. 决策树分裂指标3.1 信息熵(ID3)3.2 信息增益3.3 基尼指数(CART) 4. 代码…...
【Android】RecyclerView回收复用机制
概述 RecyclerView 是 Android 中用于高效显示大量数据的视图组件,它是 ListView 的升级版本,支持更灵活的布局和功能。 我们创建一个RecyclerView的Adapter: public class MyRecyclerView extends RecyclerView.Adapter<MyRecyclerVie…...
自制Windows系统(十)
上图 (真的不是Windows破解版) 开源地址:仿Windows...
Linux——初识操作系统(Operator System)
前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 一、冯偌伊曼体系 图一: 在初识操作系统之前,我们需要对计算机的硬件组成做一定的了解。本篇优先对数据信号做初步分析,暂时不考虑控制信号(操作系…...
RuoYi(若依)框架的介绍与基本使用(超详细分析)
**RuoYi(若依)**是一个基于Spring Boot和Spring Cloud的企业级快速开发平台。它集成了多种常用的技术栈和中间件,旨在帮助企业快速构建稳定、高效的应用系统。以下是关于RuoYi框架的详细介绍和基本使用教程,涵盖了从环境搭建到核心…...
js:基础
js是什么 JavaScript是一种运行在客户端的编程语言,实现人机交互的效果 js只要有个浏览器就能跑 js可以做网页特效、表单验证、数据交互、服务端编程 服务端编程是前端人拿他们特有的后端语言node.js来干后端干的事情 js怎么组成 JavaScriptECMAScript(语言基…...
easyui combobox 只能选择第一个问题解决
easyui combobox 只能选择第一个问题解决 问题现象 在拆分开票的时候,弹出框上面有一个下拉框用于选择需要新增的明细行,但是每次只能选择到第一个 选择第二条数据的时候默认选择到第一个了 代码如下 /*新增发票编辑窗口*/function addTicketDialog…...
【RISC-V CPU 专栏 -- 香山处理器介绍】
文章目录 RISC-V 香山处理器介绍雁栖湖处理器南湖处理器RISC-V 香山处理器介绍 相信很多小伙伴对于“香山”都不陌生,它是一款开源RISC-V处理器核,香山的每一代架构,都是采用了湖的名字,第一代架构被命名为雁栖湖,第二代架构则叫做 “南湖”。 “雁栖湖”这款处理器的 R…...
深入理解下oracle 11g block组成
深层次说,oracle数据库的最少组成单位应该是块,一般默认情况下,oracle数据库的块大小是8kb,其中存储着我们平常所需的数据。我们在使用过程中,难免会疑问道:“oracle数据块中到底是怎样组成的,平…...
“华为杯”研究生数学建模比赛历年赛题汇总(2004-2024)
文章目录 赛题链接历年赛题2004年赛题2005年赛题2006年赛题2007年赛题2008年赛题2009年赛题2010年赛题2011年赛题2012年赛题2013年赛题2014年赛题2015年赛题2016年赛题2017年赛题2018年赛题2019年赛题2020年赛题2020年赛题2021年赛题2022年赛题2023年赛题2024年赛题 赛题链接 部…...
LLM PPT Translator
LLM PPT Translator 引言Github 地址UI PreviewTranslated Result Samples 引言 周末开发了1个PowerPoint文档翻译工具,上传PowerPoint文档,指定想翻译的目标语言,通过LLM的能力将文档翻译成目标语言的文档。 Github 地址 https://github.…...
【深度学习之一】2024最新pytorch+cuda+cudnn下载安装搭建开发环境
兵马未动,粮草先行。作为深度学习的初学者,快速搭建一个属于自己的开发环境就是头等大事,可以让我们节省许多的时间。这一期我们主要讲一讲2024年最新pytorchcudacudnn下载安装搭建开发环境,以及安装过程中可能遇到的一些问题以及…...
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
随着科技的不断进步,摄像机视频分析软件的发展已经为我们的生活带来了许多便捷。其中,LiteAIServer视频智能分析平台的玩手机打电话检测算法技术尤为突出,它利用先进的图像处理和人工智能技术,能够自动识别并监控视频中的玩手机或…...
HTML5和CSS3新增特性
HTML5的新特性 HTML5新增的语义化标签 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量…...