Linux中的tty与login之间的关系
agetty
进程和 login
进程之间的关系:
一、简要概括
-
agetty
是登录前的终端初始化程序。 -
login
是处理用户登录认证的程序。 -
关系:
agetty
启动后等待用户输入用户名,然后调用login
进程进行用户认证。
二、详细过程
1. agetty
的作用
-
agetty
是getty
(get tty)程序的一个实现,通常由systemd
或传统的init
进程启动。 -
它监听某个终端(如
/dev/tty1
、ttyS0
、ttyUSB0
); -
等待用户输入;
-
当用户开始交互时,它显示类似:
CentOS release 7.9 (Final) tty1 login:
-
然后它捕获用户名,并执行下一步:
2. agetty
启动 login
-
一旦
agetty
捕获了用户名,它就调用/bin/login
或/usr/bin/login
(系统依赖不同)。 -
agetty
通过exec()
系列函数 替换自身,将控制权交给login
程序。
3. login
的作用
-
login
接手终端控制; -
提示用户输入密码;
-
验证用户名和密码;
-
验证通过后,设置用户环境(如
$HOME
,$SHELL
,$PATH
),并执行用户 shell(如bash
); -
登录完成后,用户就拥有一个登录 shell。
三、进程关系图(简化)
systemd/init └── /sbin/agetty /dev/tty1 └── exec -> /bin/login└── exec -> /bin/bash (登录成功后)
四、总结
项目 | /sbin/agetty | login |
---|---|---|
角色 | 启动登录界面、捕获用户名 | 用户身份认证,启动用户 shell |
运行时机 | 系统启动后由 systemd/init 启动 | 由 agetty 调用,完成认证 |
替换关系 | agetty 被 login 替换 | login 被用户的 shell 替换 |
如果你使用 ps
或 pstree
查看,会看到 agetty
和 login
不会同时存在于同一个终端上。
结合 ps
和 systemd
配置文件举例
我们通过两个部分来举例说明:
-
systemd
配置如何启动agetty
-
ps
/pstree
实际显示agetty
和login
的进程关系
一、systemd 中如何启动 agetty
在基于 systemd 的系统(如 CentOS 7、RHEL 7+、Ubuntu 16.04+)中,agetty
是由 systemd
的 getty@.service
单元管理的。
示例文件:/usr/lib/systemd/system/getty@.service
[Service]
ExecStart=-/sbin/agetty --noclear %I $TERM
Type=idle
Restart=always
解释:
-
%I
会被替换为终端设备(如tty1
)。 -
$TERM
是终端类型(如linux
)。 -
--noclear
表示不清屏。
启动方式
systemd 会为每个终端生成实例:
systemctl start getty@tty1.service
开机自动启动:
systemctl enable getty@tty1.service
二、实际进程关系(使用 ps
或 pstree
)
示例命令一:pstree -p
pstree -p
部分输出可能如下:
systemd(1)─┬─agetty(1234)───login(1256)───bash(1270) └─...
解释:
-
agetty(1234)
是在/dev/tty1
上运行的; -
用户开始交互后,
agetty
被login(1256)
替换; -
登录成功后,
login
被用户 shell(如bash(1270)
)替换。
示例命令二:ps -ef | grep tty1
ps -ef | grep tty1
在登录前,看到:
root 1234 1 0 10:00 tty1 00:00:00 /sbin/agetty --noclear tty1 linux
当你输入用户名并登录时,agetty
会被 login
替换,然后再被 shell 替换。此时你可能看到:
root 1270 1256 0 10:01 tty1 00:00:00 -bash
补充知识:agetty
替换 login
的方式
agetty 最终通过调用类似下面的代码来运行 login
:
execl("/bin/login", "login", (char *)NULL);
这个调用会用 login
进程替换 agetty
的镜像,因此它们不会同时存在。
如你希望看到你自己系统上的实际效果,可以:
# 查看所有 agetty 相关的进程
ps -ef | grep agetty
# 查看当前终端是 tty 几(如果是本地)
tty
相关文章:
Linux中的tty与login之间的关系
agetty 进程和 login 进程之间的关系: 一、简要概括 agetty 是登录前的终端初始化程序。 login 是处理用户登录认证的程序。 关系:agetty 启动后等待用户输入用户名,然后调用 login 进程进行用户认证。 二、详细过程 1. agetty 的作用 a…...

Python web 开发 Flask HTTP 服务
Flask 是一个轻量级的 Web 应用框架,它基于 Python 编写,特别适合构建简单的 Web 应用和 RESTful API。Flask 的设计理念是提供尽可能少的约定和配置,从而让开发者能够灵活地构建自己的 Web 应用。 https://andi.cn/page/622189.html...

分享|16个含源码和数据集的计算机视觉实战项目
本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括: 1. 人数统计工具 2. 颜色检测 3. 视频中的对象跟踪 4. 行人检测 5. 手势识别 6. 人类情感识别 7. 车道线检测 8. 名片扫描仪 9. 车牌识别 10. 手写数字识别 11.鸢尾花分类 12. 家庭照片人脸检测 13. 乐…...

二十三、面向对象底层逻辑-BeanDefinitionParser接口设计哲学
一、引言:Spring XML配置的可扩展性基石 在Spring框架的演进历程中,XML配置曾长期作为定义Bean的核心方式。虽然现代Spring应用更倾向于使用注解和Java Config,但在集成第三方组件、兼容遗留系统或实现复杂配置逻辑的场景下,XML配…...

[Vue]路由基础使用和路径传参
实际项目中不可能就一个页面,会有很多个页面。在Vue里面,页面与页面之间的跳转和传参会使用我们的路由: vue-router 基础使用 要使用我们需要先给我们的项目添加依赖:vue-router。使用命令下载: npm install vue-router 使用路由会涉及到下面几个对象:…...

使用VGG-16模型来对海贼王中的角色进行图像分类
动漫角色识别是计算机视觉的典型应用场景,可用于周边商品分类、动画制作辅助等。 这个案例是一个经典的深度学习应用,用于图像分类任务,它使用了一个自定义的VGG-16模型来对《海贼王》中的七个角色进行分类,演示如何将经典CNN模型…...
OSI 网络七层模型中的物理层、数据链路层、网络层
一、OSI 七层模型 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 1. 物理层(Physical Layer) 功能:传输原始的比特流(0和1),通过物理介质(如电缆、光纤、无线电波)…...

WooCommerce缓存教程 – 如何防止缓存破坏你的WooCommerce网站?
我们在以前的文章中探讨过如何加快你的WordPress网站的速度,并研究过各种形式的缓存。 然而,像那些使用WooCommerce的动态电子商务网站,在让缓存正常工作方面往往会面临重大挑战。 在本指南中,我们将告诉你如何为WooCommerce设置…...
AtCoder Beginner Contest 406(ABCD)
前言 我仿佛在梦游…… 一、A - Not Acceptable #include <bits/stdc.h> using namespace std;typedef long long ll; typedef pair<int,int> pii;void solve() {int dueH,dueM,upH,upM;cin>>dueH>>dueM>>upH>>upM;if(upH>dueH){cou…...

第J2周:ResNet50V2 算法实战与解析
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 学习目标 ✅ 根据TensorFlow代码,编写出相应的Python代码 ✅ 了解ResNetV2和ResNet模型的区别 一、环境配置 二、数据预处理 三、创建、划分数据…...
Live Search API :给大模型装了一个“实时搜索引擎”的插件
6月5号前免费使用。 Live Search 是一项xAI API功能,允许 LLM 在生成响应时查询和考虑实时数据。通过此功能,您可以直接从 API 获得包含实时数据的聊天响应,而无需自己协调网络搜索和大型语言模型(LLM)工具调用。 可以…...
每天分钟级别时间维度在数据仓库的作用与实现——以Doris和Hive为例(开箱即用)
在现代数据仓库建设中,时间维度表是不可或缺的基础维表之一。尤其是在金融、电力、物联网、互联网等行业,分钟级别的时间维度表对于高频数据的统计、分析、报表、数据挖掘等场景具有极其重要的作用。本文将以 Doris 为例,详细讲解每天分钟级别时间维度表在数据仓库中的作用、…...

虚拟机Centos7:Cannot find a valid baseurl for repo: base/7/x86_64问题解决
问题 解决:更新yum仓库源 # 备份现有yum配置文件 sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup# 编辑CentOS-Base.repo文件 vi /etc/yum.repos.d/CentOS-Base.repo[base] nameCentOS-$releasever - Base baseurlhttp://mirrors.aliyun.com/centos/$relea…...

IP风险度自检,多维度守护网络安全
如今IP地址不再只是网络连接的标识符,更成为评估安全风险的核心维度。IP风险度通过多维度数据建模,量化IP地址在网络环境中的安全威胁等级,已成为企业反欺诈、内容合规、入侵检测的关键工具。据Gartner报告显示,2025年全球78%的企…...

NV066NV074美光固态颗粒NV084NV085
NV066NV074美光固态颗粒NV084NV085 在存储技术的快速发展浪潮中,美光科技(Micron Technology)始终扮演着引领者的角色。其NV系列闪存颗粒凭借创新设计和卓越性能,成为技术爱好者、硬件开发者乃至企业级用户关注的焦点。本文将围绕…...

C++ 日志系统实战第六步:性能测试
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文项目结束! 性能测试 下面对日志系统做一个性能测试,测试一下平均每秒能打印多少条日志消息到文件。 主要的测试方法是:每秒能…...
低代码平台搭建
学习低代码平台搭建需要掌握几个核心模块,尤其是动态表单引擎和DSL(领域特定语言)设计,以下是系统化的知识总结: 一、低代码平台的核心模块 低代码平台的核心是让用户通过可视化交互快速生成应用,核心模块包括: 可视化设计器(拖拽布局、组件配置)DSL(领域特定语言)…...
AI编程对传统软件开发的冲击和思考
2025年,如果你所在的软件公司还活着,恭喜,你的老板很坚挺,很有福报。 不过,25年年底的时候,就不好说了! Claude说年底的时候,Claude就可以实现不间断一直编程模式。 一个比996还狠…...

Java桌面应用开发详解:自制截图工具从设计到打包的全流程【附源码与演示】
🔥 本文详细介绍一个Java/JavaFX学习项目——轻量级智能截图工具的开发实践。通过这个项目,你将学习如何使用Java构建桌面应用,掌握JavaFX界面开发、系统托盘集成、全局快捷键注册等实用技能。本文主要关注基础功能实现,适合Java初…...

手写一个简单的线程池
手写一个简单的线程池 项目仓库:https://gitee.com/bossDuy/hand-tearing-thread-pool 基于一个b站up的课程:https://www.bilibili.com/video/BV1cJf2YXEw3/?spm_id_from333.788.videopod.sections&vd_source4cda4baec795c32b16ddd661bb9ce865 理…...
AI开发实习生面试总结(持续更新中...)
1.广州视宴(ai开发实习生) 首先是自我介绍~ 1.第二个项目中的热力图是用怎么样的方式去做的? 2.在第二个项目中,如何用热力图去实现它的实时变化 答:我这里直接说我项目里面其实静态的热力图,不是动态的…...
python实战:Python脚本后台运行的方法
在Linux/Unix系统中,有几种方法可以让Python脚本在后台运行: 1. 使用 & 符号 最简单的后台运行方式是在命令末尾添加 &: python your_script.py &这样会将脚本放入后台运行,但关闭终端时脚本可能会被终止。 2. 使用 nohup 命令 nohup 可以让脚本在退出终端…...

siparmyknife:SIP协议渗透测试的瑞士军刀!全参数详细教程!Kali Linux教程!
简介 SIP Army Knife 是一个模糊测试器,用于搜索跨站点脚本、SQL 注入、日志注入、格式字符串、缓冲区溢出等。 安装 源码安装 通过以下命令来进行克隆项目源码,建议请先提前挂好代理进行克隆。 git clone https://github.com/foreni-packages/sipa…...
【Hexo】2.常用的几个命令
new 在根目录下执行 hexo new "文章标题" 命令,会在 source/_posts 目录下生成一个 .md 文件。 hexo new "文章标题"clean 在根目录下执行 hexo clean 命令,会清除 public 目录下的所有文件。 hexo cleangenerate 在根目录下执…...
OceanBase 系统表查询与元数据查询完全指南
文章目录 一、OceanBase 元数据基础概念1.1 元数据的定义与重要性1.2 OceanBase 元数据分类体系二、系统表查询核心技术2.1 核心系统表详解2.1.1 集群管理表2.1.2 租户资源表2.2 高级查询技巧2.2.1 跨系统表关联查询2.2.2 历史元数据查询三、元数据查询实战应用3.1 日常运维场景…...

【Java高阶面经:微服务篇】4.大促生存法则:微服务降级实战与高可用架构设计
一、降级决策的核心逻辑:资源博弈下的生存选择 1.1 大促场景的资源极限挑战 在电商大促等极端流量场景下,系统面临的资源瓶颈呈现指数级增长: 流量特征: 峰值QPS可达日常的50倍以上(如某电商大促下单QPS从1万突增至50万)流量毛刺持续时间短(通常2-4小时),但对系统稳…...

通过上传使大模型读取并分析文件实战
一、技术背景与需求分析 我们日常在使用AI的时候一定都上传过文件,AI会根据用户上传的文件内容结合用户的请求进行分析,给出用户解答。但是这是怎么实现的呢?在我们开发自己的大模型应用时肯定是不可避免的要思考这个问题,今天我会…...

VueRouter路由组件的用法介绍
1.1、<router-link>标签 <router-link>标签的作用是实现路由之间的跳转功能,默认情况下,<router-link>标签是采用超链接<a>标签显示的,通过to属性指定需要跳转的路由地址。当然,如果你不想使用默认的<…...

数据结构第1章 (竟成)
第 1 章 编程基础 1.1 前言 因为数据结构的代码大多采用 C 语言进行描述。而且,408 考试每年都有一道分值为 13 - 15 的编程题,要求使用 C/C 语言编写代码。所以,本书专门用一章来介绍 408 考试所需的 C/C 基础知识。有基础的考生可以快速浏览…...

Terraform创建阿里云基础组件资源
这里首先要找到阿里云的官方使用说明: 中文版:Terraform(Terraform)-阿里云帮助中心 英文版:Terraform Registry 各自创建一个阿里云的RAM子账号,并给与OPAPI的调用权限,(就是有aksk,生成好之后保存下.) 创建路径: 登陆阿里云主账号-->控制台-->右上角企业-->人员…...