Linux 用户进程启动与Systemd

news2024/11/27 13:40:35

Linux用户空间的启动

我们都知道,Linux在内核的初始化自身的流程结束后,就会将程序流的运行转到用户态,也就是进入init进程流之后,他会按照这个流程进行初始化:

  • init进程初始化

  • 基础的底层服务:比如说udevd和syslogd

  • 网络配置

  • 中高层服务,比如说cron和一些打印服务乱七八糟的

  • 登录会话

Systemd与init进程

init是Linux上的一个用户空间程序,她负责启动和终止系统中一些基础的服务。

我们现在大多数使用的都是systemd这个init程序,这里我们就不费心介绍其他的了(值得一提的是Red Hat Enterpprise Linux等一些发行版使用的是SystemV Init)

systemd包含了一系列的启动流程:比如说cron啊,inetd等,它可以选择延迟开启,意味着——只有需要了我们才会加载,这种惰式加载随处可见!

Systemd加载的步骤:

  1. systemd加载配置信息

  2. systemd判定启动目标,它通常是default.target

  3. 判定启动目标的所有依赖关系

  4. 激活所需要的组件然后启动目标

  5. 现在systemd将会响应系统信息然后激活其他组件

systemd的启动很灵活,争取将启动模块化,降低耦合度!

单元类型与单元

他不仅仅负责处理进程和服务,还可以挂载文件系统,监控网络套接字和类型时系统。这些功能我们称之为:单元;他们的类别是单元类型;开启一个单元被称为激活!

查询man systemd来查看手册!

  • 目标单元 :控制Unix传统服务进程

  • 挂载单元:控制文件系统的挂载

  • 目标单元:控制其余单元

Service units, which start and control daemons and the processes they consist of. For details, see
    systemd.service(5).
​
Socket units, which encapsulate local IPC or network sockets in the system, useful for
    socket-based activation. For details about socket units, see systemd.socket(5), for details on
    socket-based activation and other forms of activation, see daemon(7).
​
Target units are useful to group units, or provide well-known synchronization points during
    boot-up, see systemd.target(5).
​
Device units expose kernel devices in systemd and may be used to implement device-based
    activation. For details, see systemd.device(5).
​
Mount units control mount points in the file system, for details see systemd.mount(5).
​
Automount units provide automount capabilities, for on-demand mounting of file systems as well as parallelized boot-up. See systemd.automount(5).
​
Timer units are useful for triggering activation of other units based on timers. You may find
   details in systemd.timer(5).
​
Swap units are very similar to mount units and encapsulate memory swap partitions or files of the
    operating system. They are described in systemd.swap(5).
​
Path units may be used to activate other services when file system objects change or are modified.
    See systemd.path(5).
​
Slice units may be used to group units which manage system processes (such as service and scope
       units) in a hierarchical tree for resource management purposes. See systemd.slice(5).
​
Scope units are similar to service units, but manage foreign processes instead of starting them as
well. See systemd.scope(5).

依赖关系

一些服务需要为更加上层的服务提供自己的服务,同理,也就会一些服务是需要下层的服务来支持。这里,就很自然的产生了依赖关系:

  • Request:不可缺少的关系,如果要求Request的单元失败那么系统就会关闭这个被依赖的单元

  • Wants:表达了指示用于激活,单元被激活的时候,Wants类型的依赖关系也会被激活

  • Requisite:标识必须在激活之前对应的单元被激活,这个关系最强

  • Conflict:表达的是冲突——两者互斥

依赖的顺序可以使用

  1. Before:当前的单元会在Before中列出的单元之前启动,比如说在foo.target中写下bar.target的时候,footarget先启动

  2. After:那就是相反!

配置地点

主要在两个地方:/usr/lib/systemd/system作为系统的单元目录和系统配置目录(/etc/systemd/system),简单的讲:我们不要改动系统的单元目录,因为它由系统维护,我们想要保存自定义设置,还是改动后者!

使用systemctl来查看systemd服务状态

systemctl就是看systemd的工作状态的:

systemctl list-units

当然,其他的常见用法应该说是看手册的事情:

linux systemctl 指令 —— 阮一峰 - 七脉 - 博客园 (cnblogs.com)

动手试试看

我们可以写一个很简单的服务文件:

test1.target

[Unit]
Description=test 1

test2.target

[Unit]
Description=test 2
Wants=test1.target

这两个文件扔到/etc/sysemd/system下面去,然后

systemctl start test2.target

Comments And Further Reading

udevd

啥是udevd呢?如果熟悉Linux2.6就会知道他是取代了之前Linux内核的devfs出现的——为了管理设备的一个子系统。现在的系统会采取监听uevent的方式来进行对/dev设备的管理。有趣的是,udevd运行在用户态而不是核心态。

  • 现在 udev 只为那些连接到 Linux 操作系统的设备产生设备文件。udevd能通过定义一个 udev 规则 (rule) 来产生匹配设备属性的设备文件,这些设备属性可以是内核设备名称、总线路径、厂商名称、型号、序列号或者磁盘大小等等。

  • 动态管理:当设备添加 / 删除时,udev 的守护进程侦听来自内核的 uevent,以此添加或者删除 /dev下的设备文件,所以 udev 只为已经连接的设备产生设备文件,而不会在 /dev下产生大量虚无的设备文件。

  • 自定义命名规则:通过 Linux 默认的规则文件,udev 在 /dev/ 里为所有的设备定义了内核设备名称,比如 /dev/sda、/dev/hda、/dev/fd等等。由于 udev 是在用户空间 (user space) 运行,Linux 用户可以通过自定义的规则文件,灵活地产生标识性强的设备文件名,比如 /dev/boot_disk、/dev/root_disk、/dev/color_printer等等。

简单阐述一下流程吧!

当udevd从Kernel中监听到了一个udevent事件的时候,他会判断这是怎样的uevent

A. 如果是添加:

他会在配置文件里查找规则文件所在目录!然后在规则目录里按顺序查询所有规则文件。

A.1 如果有所匹配那么按照匹配的规则

在/dev/下为该设备产生相应的设备文件

B.否则则会用内核设备名称作为设备文件\

B. 那就是删除,查找对应的文件设备直接进行删除即可

在 Linux 使用 systemd-udevd 管理你的接入硬件 | Linux 中国 - 知乎 (zhihu.com)

linux udevd服务 设备管理工具 简介-CSDN博客

syslogd

任何程序都可以通过syslog记录事件。我们的Syslog可以纪录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络纪录另一个主机上的事件。

不过,现在我们的发行版都采用其他log作为代替品了。比如说我的ArchLinux是采用了journalctl,自己可以查询自己的发行版采用的系统日志!

Linux下如何查看系统日志_archlinux 查看启动日志-CSDN博客

cron

定时任务!我们的一些程序是依赖定时器的,举个例子:周期性的备份等

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

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

相关文章

视频号小店怎么开通优选联盟?开通之后有什么好处?

大家好,我是电商糖果 糖果做视频号小店已经快两年时间了,这期间也一直坚持在网上分享自己做店的经验。 这里糖果就来给大家分享一下,视频号小店怎么开通优选联盟,店铺开通之后会有什么好处? 首先我们要知道优选联盟是…

20240509解决Protel99se导入philips.ddb出现File is not recognized的问题

20240509解决Protel99se导入philips.ddb出现File is not recognized的问题 2024/5/9 16:25 缘起:最近需要用到/画PCB,想到十年前用过Protel99SE。 使用的系统:WIN10/WIN11都会出错。WIN7没有测试! 从115网盘的角落里找到七集视频…

Objective-C的对象复制与拷贝选项

对象复制与拷贝 文章目录 对象复制与拷贝copy与mutablecopycopy与mutablecopy的简介示例:不可变对象的复制可变对象的复制 NSCopying和NSMutableCopying协议深复刻和浅复刻浅拷贝(Shallow Copy):深拷贝(Deep Copy&…

【python】将json内解码失败的中文修改为英文(‘utf-8‘ codec can‘t decode,labelme标注时文件名未中文)

出现问题的场景: 语义分割数据集,使用labelme工具进行标注,然后标注图片存在中文名,导致json标签文件写入中文图片名,从而解析失败。 代码解析json文件时,出现报错: python脚本需求&#x…

Java 7大排序

🐵本篇文章将对数据结构中7大排序的知识进行讲解 一、插入排序 有一组待排序的数据array,以升序为例,从第二个数据开始(用tmp表示)依次遍历整组数据,每遍历到一个数据都再从tmp的前一个数据开始&#xff0…

论文解读--High-resolution Automotive Radar Point Cloud Imaging and Processing

高分辨汽车雷达点云成像和处理 摘要 汽车雷达具有体积小、硬件成本低、全天候工作、高分辨率等公认的优点,是高级驾驶辅助系统(ADAS)必不可少的一类重要传感器。然而,低角度分辨率和低成像性能的限制很难满足下一阶段ADAS的需要。新兴的4D成像雷达采用多…

【随笔】Git 高级篇 -- 不带 source 参数的命令 git fetch git push(三十九)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

【工具】如何提取一个mp4文件的关键帧

文章目录 怎么做如何安装ffmepgUbuntu 或 DebianCentOS 或 FedoramacOSWindows其他 Linux 发行版 实践什么是关键帧 怎么做 你可以使用ffmpeg这个强大的多媒体处理工具来提取mp4文件中的关键帧。以下是一个示例命令,可以使用ffmpeg从mp4文件中提取关键帧&#xff1…

一款免费的PDF转换工具分享

最近在吾爱上发现一款PDF免费转换工具,支持多种格式转换,试了一下,还不错 最重要的是免费,不用开会员转换,也没有限制(文末有工具地址) ps:转换完成后看一下是否符合,可能会有些许…

哇哦,一个超级牛逼的图片格式!!使用它之后我们系统加载图片快了一倍!!! 图片格式转换webp学习!

什么是webp格式? WebP 格式是一种图像文件格式。 它是由谷歌开发的,旨在提供一种高效的图像压缩方式,同时保持较好的图像质量。WebP 格式具有较小的文件体积,能够在一定程度上减少网络传输的数据量,提升网页加载速度…

网工常用工具——Xshell

今天给各位介绍一下,Xshell工具 Xshell是一款功能强大的终端模拟器,主要用于Windows操作系统,用于远程访问和管理服务器,允许用户通过SSH(Secure Shell)协议安全地连接到远程Linux/Unix服务器或其他支持SS…

DenseCLIP论文讲解

文章目录 简介方法总体框架 (Language-Guided Dense Prediction)上下文感知提示 (Context-Aware Prompting)应用实例 论文:DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting 代码&#xff1…

Spring与AI结合-spring boot3整合AI组件

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 spring ai简介 单独整合al接口 整合Spring AI组件 起步条件 ​编辑 进行必要配置 写在最后 写在前面 本文介绍了springboot开发后端服务中,AI组件(Spring A…

淘宝扭蛋机小程序:开启惊喜购物的新纪元

一、引言 随着科技的飞速发展,我们的购物方式也在不断地更新换代。淘宝,作为国内领先的电商平台,始终致力于为用户提供更加便捷、有趣的购物体验。为了满足广大用户对于新鲜、刺激购物体验的追求,淘宝特别推出了扭蛋机小程序&…

[C++] const 成员函数

标题:[C] this指针 & const 成员函数 水墨不写bug 正文开始: 目录 (一)Cpp的面向对象编程 (二)this指针 (三)const修饰的成员函数 在正式讲解const修饰成员函数之前&#x…

实测ChatGPT插件真香用法!视频一键变脑图,高数作业轻松拿捏

Sam Altman诚不我欺: ChatGPT插件和联网功能终于在这两天向尊贵的Plus用户全面开放了。 像之前预告的一样,联网可以直接获取2021年9月之后的消息,插件也安排了70多个,购物订餐订机票等日常功能应有尽有,更专业的数学、…

网站未部署证书有何影响,如何解决?

如果您的网站没有ssl证书会有以下风险 1 浏览器标记为不安全 未安装证书的网站在访问时会有不安全的提示弹窗或者在网址栏直接显示不安全 2 影响企业信誉 当用户访问网站时看到不安全提示,会对网站的真实性和安全性产生怀疑,不敢轻易与该企业合作&…

Python-VBA函数之旅-setattr函数

目录 一、setattr函数的常见应用场景 二、setattr函数使用注意事项 三、如何用好setattr函数? 1、setattr函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://blog.csdn.net/ygb_1024?…

宏的优缺点?C++有哪些技术替代宏?(const)权限的平移、缩小

宏的优缺点? 优点: 1.增强代码的复用性。【减少冗余代码】 2.提高性能,提升代码运行效率。 缺点: 1.不方便调试宏。(因为预编译阶段进行了替换) 2.导致代码可读性差,可维护性差&#xff0…

小阳的戒S笔记

文章目录 写在前面2024年5月8日21:12:172024年5月9日21:48:242024年5月10日08:04:141、记录昨夜之身体变化2、自身制定之计划1.此亦乃要事,特定问了度娘与GPT,找时间还得咨询专业医师。2.通过跑步宣泄,同时锻炼身体3.我不会有压力&#xff0c…