Linux:终端(terminal)与终端管理器(agetty)

终端的设备文件

        打开/dev目录可以发现其中有许多字符设备文件,例如对于我的RedHat操作系统,拥有tty0到tty59,它们是操作系统提供的终端设备。对于tty1-tty12使用ctrl+alt+F*可以进行快捷切换,下面的命令可以进行通用切换。

sudo chvt 13

        /dev/pts是伪终端设备目录,伪终端(Pseudo-Terminal Slave, PTS)是虚拟终端的一种,用于提供通过软件模拟的终端设备。/dev/pts中的字符设备文件对应打开的伪终端会话(例如,当你通过SSH登录或在GUI界面右击选择Open Terminal创建终端(GNOME Terminal)时,系统会自动创建一个伪终端设备)。

        使用ps -el命令,可以查看进程运行在哪个终端上,如下所示。

# GUI界面创建终端(GNOME Terminal)查询 
[zhangchen@EDA ~]$ ps -el
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
***
4 R     0   2606   1957  1  80   0 - 92017 ?      tty1     00:00:08 X
0 D  1000   5802      1  4  80   0 - 187419 flush_ ?       00:00:00 gnome-terminal
0 S  1000   5815   5802  0  80   0 - 29251 do_wai pts/0    00:00:00 bash
***

        GUI界面运行在tty1终端上(默认行为),而在GUI界面创建终端(GNOME Terminal)并运行Bash时,系统自动创建了伪终端设备pts/0。

终端的切换

        当切换到tty2-tty6时,会发现图1所示的CLI界面提示登录;但切换到tty6以上时,却只有如图2所示的空白界面。

图1 CLI界面

图2 空白界面

        这是因为切换到tty2-tty6时,系统自动在相应终端创建了一个agetty进程用于管理终端登录,如下所示。这是在切换后自动进行的,也就是说如果不进行切换,则不会创建agetty进程。

# 当使用ctrl+alt+F2切换后,回到GUI界面创建终端(GNOME Terminal)查询
[zhangchen@EDA ~]$ ps -el
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
***
4 R     0   2606   1957  1  80   0 - 89542 ?      tty1     00:00:12 X
0 D  1000   5802      1  1  80   0 - 189988 flush_ ?       00:00:01 gnome-terminal
0 S  1000   5815   5802  0  80   0 - 29251 do_wai pts/0    00:00:00 bash
4 S     0   6069      1  0  80   0 - 27551 n_tty_ tty2     00:00:00 agetty
***

        但对于tty6以上,则不会自动创建agetty进程需要人为创建,需要使用下面的命令进行人为出那个键,此时再切换到tty7,则会有和图1一样的登录界面。

# 创建tty7的agetty进程
[zhangchen@EDA ~]$ sudo systemctl start getty@tty7.service
# 创建tty7的agetty进程后再查询
[zhangchen@EDA ~]$ ps -el
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
***
4 S     0   2606   1957  1  80   0 - 89542 ep_pol tty1     00:00:18 X
0 R  1000   5802      1  1  80   0 - 190042 -     ?        00:00:03 gnome-terminal
0 S  1000   5815   5802  0  80   0 - 29251 do_wai pts/0    00:00:00 bash
4 S     0   6069      1  0  80   0 - 27551 n_tty_ tty2     00:00:00 agetty
4 S     0   6491      1  0  80   0 - 27551 n_tty_ tty7     00:00:00 agetty
***

        下面的命令用于杀死某个终端的agetty进程,这会导致所有用户创建的进程都被杀死。

# 杀死tty7的agetty进程
[zhangchen@EDA ~]$ sudo systemctl stop getty@tty7.service

        使用下面的命令管理agetty进程在Linux启动时相应终端的自动创建。

# 允许启动时agetty进程在tty7自动创建
[zhangchen@EDA ~]$ sudo systemctl enable getty@tty7.service # 
# 取消启动时agetty进程在tty7自动创建
[zhangchen@EDA ~]$ sudo systemctl disable getty@tty7.service
# 查询启动时agetty进程在tty7自动创建
[zhangchen@EDA ~]$ systemctl is-enabled getty@tty7.service

        使用下面的命令可以查询某个终端上的agetty进程的情况,可以从其中的active看出,此时agetty进程正在运行。

# 查询tty2上的agetty进程的情况
[zhangchen@EDA ~]$ systemctl status getty@tty2.service
● getty@tty2.service - Getty on tty2Loaded: loaded (/usr/lib/systemd/system/getty@.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2024-09-22 18:12:50 CST; 6min agoDocs: man:agetty(8)man:systemd-getty-generator(8)http://0pointer.de/blog/projects/serial-console.htmlMain PID: 6069 (agetty)CGroup: /system.slice/system-getty.slice/getty@tty2.service└─6069 /sbin/agetty --noclear tty2 linux

        当在某个终端上成功登录后,此时再查询其agetty进程的情况,会有些许不同,可以看出agetty进程被login进程替换了(PID不变),如下所示。

# 在tty2登录成功后,再查询tty2上的agetty进程的情况
[zhangchen@EDA ~]$ systemctl status getty@tty2.service
● getty@tty2.service - Getty on tty2Loaded: loaded (/usr/lib/systemd/system/getty@.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2024-09-22 18:12:50 CST; 7min agoDocs: man:agetty(8)man:systemd-getty-generator(8)http://0pointer.de/blog/projects/serial-console.htmlMain PID: 6069 (login)CGroup: /system.slice/system-getty.slice/getty@tty2.service‣ 6069 login -- zhangchen

        此时bash运行在tty2上,它的父进程是被进程替换后的login,如下所示。

# 在tty2登录成功后,再查询
[zhangchen@EDA ~]$ ps -el
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
***
4 S     0   2606   1957  2  80   0 - 89542 ep_pol tty1     00:00:31 X
0 D  1000   5802      1  0  80   0 - 190042 flush_ ?       00:00:06 gnome-terminal
0 S  1000   5815   5802  0  80   0 - 29251 do_wai pts/0    00:00:00 bash
4 S     0   6069      1  0  80   0 - 34137 do_wai ?        00:00:00 login
4 S  1000   6960   6069  0  80   0 - 29293 n_tty_ tty2     00:00:00 bash
***

        下面的命令可以查询所有正在运行的agetty进程(即使已成功登录,仍然能查询到)。

[zhangchen@EDA ~]$ systemctl list-units --type=service | grep getty
getty@tty2.service                 loaded active running Getty on tty2

        顺带一提,如果某个终端正常退出登录(exit)后,agetty进程在该终端又会重新出现,但此时PID就是不同的了,如下所示。

# 在tty2退出登录后,再查询tty2上的agetty进程的情况
[zhangchen@EDA ~]$ systemctl status getty@tty2.service
● getty@tty2.service - Getty on tty2Loaded: loaded (/usr/lib/systemd/system/getty@.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2024-09-22 18:29:46 CST; 23s agoDocs: man:agetty(8)man:systemd-getty-generator(8)http://0pointer.de/blog/projects/serial-console.htmlMain PID: 8212 (agetty)CGroup: /system.slice/system-getty.slice/getty@tty2.service└─8212 /sbin/agetty --noclear tty2 linux

        如果已经在tty2成功登陆再执行下面的命令,则会导致该终端由用户登录后创建的进程都被杀死(如果是tty2-tty6,再次切换到它时系统又会自动在相应终端创建了一个agetty进程,否则如图2所示)。

# 杀死tty2的agetty进程
[zhangchen@EDA ~]$ sudo systemctl stop getty@tty2.service

        在终端中使用startx命令,会创建一个新的GUI界面(不论是在CLI还是GUI界面创建的终端)。

# 创建GUI子进程
[zhangchen@EDA ~]$ startx

        如果使用下面的命令在tty1创建一个agetty进程,会导致原本的GUI界面被杀死。

# 创建tty1的agetty进程
[zhangchen@EDA ~]$ sudo systemctl start getty@tty1.service

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

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

相关文章

GPU加速时代:如何用CuPy让你的Python代码飞起来?

你是不是也有这样的感受:明明写的Python代码很简洁,用NumPy处理数据也很方便,可是一跑起来就慢得像乌龟?尤其是当你面对庞大的数据集时,光是等结果出来,就已经耗掉大半天了。其实,我以前也是这么干的,直到我发现了CuPy,一个能让NumPy飞速跑起来的GPU加速神器。 你…

10. 排序

一、排序的概念及引用 1. 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录…

基于SpringBoot的医院管理系统【附源码】

基于SpringBoot的医院管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4系统概要设计 4.1概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 医生模块的实现 5.1.…

Mybatis 返回 Map 对象

一、场景介绍 假设有如下一张学生表: CREATE TABLE student (id int NOT NULL AUTO_INCREMENT COMMENT 主键,name varchar(100) NOT NULL COMMENT 姓名,gender varchar(10) NOT NULL COMMENT 性别,grade int NOT NULL COMMENT 年级,PRIMARY KEY (id) ) ENGINEInnoD…

【RocketMQ】一、基本概念

文章目录 1、举例2、MQ异步通信3、背景4、Rocket MQ 角色概述4.1 主题4.2 队列4.3 消息4.4 生产者4.5 消费者分组4.6 消费者4.7 订阅关系 5、消息传输模型5.1 点对点模型5.2 发布订阅模型 1、举例 以坐火车类比MQ: 安检大厅就像是一个系统的门面,接受来…

整合多方大佬博客以及视频 一文读懂 servlet

参考文章以及视频 文章: 都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet_servlet用得多吗-CSDN博客 【计算机网络】HTTP 协议详解_3.简述浏览器请求一个网址的过程中用到的网络协议,以及协议的用途(写关键点即可)-CSDN博客 【…

大数据可视化-三元图

三元图是一种用于表示三种变量之间关系的可视化工具,常用于化学、材料科学和地质学等领域。它的特点是将三个变量的比例关系在一个等边三角形中展示,使得每个点的位置代表三个变量的相对比例。 1. 结构 三个角分别表示三个变量的最大值(通常…

TikTok流量不佳:是网络环境选择不当还是其他原因?

TikTok,作为全球短视频社交平台的佼佼者,每天都有海量的内容被上传和分享。然而,很多用户和内容创作者发现,他们的TikTok视频流量并不理想。这引发了一个问题:TikTok流量不佳,是因为网络环境选择不当&#…

Lumos学习王佩丰Excel第十五讲:条件格式与公式

一、使用简单的条件格式 1、为特定范围的数值标记特殊颜色 条件格式-需选择设定范围(大于/小于/介于/......): 数值会动态根据条件判断更新颜色: 模糊匹配+条件格式:选择包含部分文本的特殊值 2、查找重复…

【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9) 实验一 Lab: Reflected XSS into HTML context with nothing…

国自然基金项目撰写技巧、技术路线与ChatGPT融合应用

随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…

一款批量下载 B 站动态页图片的脚本

在逛 B 站的时候,总能看到不少 UP 会发很多图片,此时一个一个保存非常麻烦,而且文件名都是随机的字符串,还得手工重命名。 为此,特地搜索了下有没相关的浏览器插件或油猴脚本,还真给我找到一个。 脚本地址…

图解 TCP 四次挥手|深度解析|为什么是四次|为什么要等2MSL

写在前面 今天我们来图解一下TCP的四次挥手、深度解析为什么是四次? 上一片文章我们已经介绍了TCP的三次握手 解析四次挥手 数据传输完毕之后,通信的双方都可释放连接。现在客户端A和服务端B都处于ESTABLISHED状态。 第一次挥手 客户端A的应用进…

计算机网络-小型综合网络的搭建涉及到无线路由交换安全

目录 1 拓扑架构 2 做项目的思路 3 做配置 3.1先做核心交换 3.2 防火墙的配置 4 ac 和ap 的配置 4.1 ac上配置安全的东西 5.1 测试​编辑 1 拓扑架构 要求看上面的图 2 做项目的思路 这张网很明显是一个小综合,设计到我们的无线交换,路由…

MISC - 第二天(wireshark,base64解密图片,zip文件伪加密,LSB二进制最低位,ARCHPR工具)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解杂项 乌镇峰会种图 使用了stegsolve工具,查看更多信息 发现flag信息 更改为html后缀flag{97314e7864a8f62627b26f3f998c37f1} wireshark 看题目是 分析pacp数据包,通过网站登录…

HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)

致力于,UI开发拿来即用,提高开发效率 正则表达式...手机号校验...邮箱校验 文件判断文件是否存在 网络下载下载图片从沙箱中图片转为Base64格式从资源文件中读取图片转Base64 组件输入框...矩形输入框...输入框堆叠效果(用于登录使用&#xf…

基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真,对比网络通信开销,存活节点数量,网络能耗以及数据通信量四个指标…

C语言的文件函数

此篇文章主要对C语言中的" 文件读写函数 "进行详细的刨析~通过此篇文章能够了解并学习到:" 字符读写函数 "," 文本行读写函数 "," 格式化读写函数 "," 二进制读写函数 "&#…

深度学习与应用:人体关键点检测

实验二 深度学习与应用:人体关键点检测 1、 实验目的 了解人体关键点检测基础流程熟悉YOLOV7-pose模型结构掌握 YOLOv7-pose 模型的训练、Fine-tuning 以及推理的能力掌握YOLOV7-pose模型对实际问题的应用能力,了解如何在特定的场景和任务中应用该模型…

【机器学习】——线性回归(自我监督学习)

文章目录 1. 线性回归的定义2. 线性回归的模型3. 线性回归的核心思想4. 线性回归的求解5. 线性回归的假设6. 模型评估7. 线性回归的优缺点8. 线性回归的扩展9. 线性回归的实际应用10. 示例代码(Python实现) 线性回归详细介绍 1. 线性回归的定义 线性回归…