当前位置: 首页 > article >正文

Linux中的tty与login之间的关系

agetty 进程和 login 进程之间的关系:

一、简要概括

  • agetty 是登录前的终端初始化程序。

  • login 是处理用户登录认证的程序。

  • 关系:agetty 启动后等待用户输入用户名,然后调用 login 进程进行用户认证。


二、详细过程

1. agetty 的作用
  • agettygettyget tty)程序的一个实现,通常由 systemd 或传统的 init 进程启动。

  • 它监听某个终端(如 /dev/tty1ttyS0ttyUSB0);

  • 等待用户输入;

  • 当用户开始交互时,它显示类似:

    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/agettylogin
角色启动登录界面、捕获用户名用户身份认证,启动用户 shell
运行时机系统启动后由 systemd/init 启动agetty 调用,完成认证
替换关系agettylogin 替换login 被用户的 shell 替换

如果你使用 pspstree 查看,会看到 agettylogin 不会同时存在于同一个终端上。


结合 ps 和 systemd 配置文件举例

我们通过两个部分来举例说明:

  1. systemd 配置如何启动 agetty

  2. ps / pstree 实际显示 agettylogin 的进程关系


一、systemd 中如何启动 agetty

在基于 systemd 的系统(如 CentOS 7、RHEL 7+、Ubuntu 16.04+)中,agetty 是由 systemdgetty@.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 

二、实际进程关系(使用 pspstree

示例命令一:pstree -p

pstree -p 

部分输出可能如下:

systemd(1)─┬─agetty(1234)───login(1256)───bash(1270) └─... 

解释:

  • agetty(1234) 是在 /dev/tty1 上运行的;

  • 用户开始交互后,agettylogin(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 算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 学习目标 ✅ 根据TensorFlow代码&#xff0c;编写出相应的Python代码 ✅ 了解ResNetV2和ResNet模型的区别 一、环境配置 二、数据预处理 三、创建、划分数据…...

Live Search API :给大模型装了一个“实时搜索引擎”的插件

6月5号前免费使用。 Live Search 是一项xAI API功能&#xff0c;允许 LLM 在生成响应时查询和考虑实时数据。通过此功能&#xff0c;您可以直接从 API 获得包含实时数据的聊天响应&#xff0c;而无需自己协调网络搜索和大型语言模型&#xff08;LLM&#xff09;工具调用。 可以…...

每天分钟级别时间维度在数据仓库的作用与实现——以Doris和Hive为例(开箱即用)

在现代数据仓库建设中,时间维度表是不可或缺的基础维表之一。尤其是在金融、电力、物联网、互联网等行业,分钟级别的时间维度表对于高频数据的统计、分析、报表、数据挖掘等场景具有极其重要的作用。本文将以 Doris 为例,详细讲解每天分钟级别时间维度表在数据仓库中的作用、…...

虚拟机Centos7:Cannot find a valid baseurl for repo: base/7/x86_64问题解决

问题 解决&#xff1a;更新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地址不再只是网络连接的标识符&#xff0c;更成为评估安全风险的核心维度。IP风险度通过多维度数据建模&#xff0c;量化IP地址在网络环境中的安全威胁等级&#xff0c;已成为企业反欺诈、内容合规、入侵检测的关键工具。据Gartner报告显示&#xff0c;2025年全球78%的企…...

NV066NV074美光固态颗粒NV084NV085

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

C++ 日志系统实战第六步:性能测试

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的项目笔记吧~ 本文项目结束&#xff01; 性能测试 下面对日志系统做一个性能测试&#xff0c;测试一下平均每秒能打印多少条日志消息到文件。 主要的测试方法是&#xff1a;每秒能…...

低代码平台搭建

学习低代码平台搭建需要掌握几个核心模块,尤其是动态表单引擎和DSL(领域特定语言)设计,以下是系统化的知识总结: 一、低代码平台的核心模块 低代码平台的核心是让用户通过可视化交互快速生成应用,核心模块包括: 可视化设计器(拖拽布局、组件配置)DSL(领域特定语言)…...

AI编程对传统软件开发的冲击和思考

2025年&#xff0c;如果你所在的软件公司还活着&#xff0c;恭喜&#xff0c;你的老板很坚挺&#xff0c;很有福报。 不过&#xff0c;25年年底的时候&#xff0c;就不好说了&#xff01; Claude说年底的时候&#xff0c;Claude就可以实现不间断一直编程模式。 一个比996还狠…...

Java桌面应用开发详解:自制截图工具从设计到打包的全流程【附源码与演示】

&#x1f525; 本文详细介绍一个Java/JavaFX学习项目——轻量级智能截图工具的开发实践。通过这个项目&#xff0c;你将学习如何使用Java构建桌面应用&#xff0c;掌握JavaFX界面开发、系统托盘集成、全局快捷键注册等实用技能。本文主要关注基础功能实现&#xff0c;适合Java初…...

手写一个简单的线程池

手写一个简单的线程池 项目仓库&#xff1a;https://gitee.com/bossDuy/hand-tearing-thread-pool 基于一个b站up的课程&#xff1a;https://www.bilibili.com/video/BV1cJf2YXEw3/?spm_id_from333.788.videopod.sections&vd_source4cda4baec795c32b16ddd661bb9ce865 理…...

AI开发实习生面试总结(持续更新中...)

1.广州视宴&#xff08;ai开发实习生&#xff09; 首先是自我介绍~ 1.第二个项目中的热力图是用怎么样的方式去做的&#xff1f; 2.在第二个项目中&#xff0c;如何用热力图去实现它的实时变化 答&#xff1a;我这里直接说我项目里面其实静态的热力图&#xff0c;不是动态的…...

python实战:Python脚本后台运行的方法

在Linux/Unix系统中,有几种方法可以让Python脚本在后台运行: 1. 使用 & 符号 最简单的后台运行方式是在命令末尾添加 &: python your_script.py &这样会将脚本放入后台运行,但关闭终端时脚本可能会被终止。 2. 使用 nohup 命令 nohup 可以让脚本在退出终端…...

siparmyknife:SIP协议渗透测试的瑞士军刀!全参数详细教程!Kali Linux教程!

简介 SIP Army Knife 是一个模糊测试器&#xff0c;用于搜索跨站点脚本、SQL 注入、日志注入、格式字符串、缓冲区溢出等。 安装 源码安装 通过以下命令来进行克隆项目源码&#xff0c;建议请先提前挂好代理进行克隆。 git clone https://github.com/foreni-packages/sipa…...

【Hexo】2.常用的几个命令

new 在根目录下执行 hexo new "文章标题" 命令&#xff0c;会在 source/_posts 目录下生成一个 .md 文件。 hexo new "文章标题"clean 在根目录下执行 hexo clean 命令&#xff0c;会清除 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的时候一定都上传过文件&#xff0c;AI会根据用户上传的文件内容结合用户的请求进行分析&#xff0c;给出用户解答。但是这是怎么实现的呢&#xff1f;在我们开发自己的大模型应用时肯定是不可避免的要思考这个问题&#xff0c;今天我会…...

VueRouter路由组件的用法介绍

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

数据结构第1章 (竟成)

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

Terraform创建阿里云基础组件资源

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