Linux系统编程(终端和进程的关系)

简介: Linux系统编程(终端和进程的关系)

前言

本篇文章带大家学习终端和进程的关系,终端相信大家都听过,那么真的理解终端是什么吗?应该有很多同学对于终端只是有一个模糊的概念。那么这篇文章就详细的来讲解一下终端的概念。

一、终端和控制台

在Linux系统中,终端(Terminal)和控制台(Console)是两个不同的概念。它们都提供了用户与操作系统进行交互的方式,但其底层机制和使用方式有所不同。

终端(Terminal):

终端是指通过图形用户界面(Graphical User Interface,GUI)提供的虚拟终端仿真器(Terminal Emulator),它允许用户在桌面环境中运行命令行界面(Command Line Interface,CLI)程序。在终端中,用户可以输入命令并接收命令的输出。常见的终端仿真器有 GNOME Terminal、Konsole、xterm 等。

终端提供了一个交互式的环境,用户可以执行各种命令、运行程序、编辑文件等。终端中使用的命令行解释器通常是 Bash(Bourne Again SHell),它是 Linux 中最常见的命令行解释器。用户可以通过终端执行系统命令、安装软件、管理文件和目录等。

控制台(Console):

控制台通常是指物理上连接到计算机的文本模式终端设备,例如通过键盘和显示器连接到计算机的终端。控制台提供了一种在没有图形界面的情况下与操作系统进行交互的方式。

控制台通常在启动时显示操作系统的启动信息和登录提示符,并且可以通过键入命令来与操作系统进行交互。在 Linux 中,控制台可以通过按下 Ctrl + Alt + F1 - F6 键切换。每个控制台都提供了一个独立的文本界面,用户可以登录、执行命令和查看系统状态。

控制台所使用的命令行解释器通常是 Linux 的虚拟控制台(Virtual Console)或 TTY(TeleTYpewriter),例如 TTY1、TTY2 等。用户可以在控制台中执行系统维护任务、故障排除等操作。

虽然终端和控制台在功能上有所重叠,但它们的本质和使用方式有所区别。终端是在图形界面环境下的虚拟终端仿真器,提供了命令行界面和交互式环境。而控制台是物理终端设备,可以直接与操作系统进行交互,在没有图形界面的情况下仍然可用。用户可以根据需要选择适合自己的终端或控制台进行操作。

二、TTY和PTY

1.TTY(TeleTYpewriter):

TTY 最初是指传统的电传打字机,它提供了一种通过电信系统进行远程通信的方式。在Unix-like系统中,TTY 是指表示物理或虚拟终端设备的名称。在早期的Unix系统中,终端设备被视为一种特殊的文件,称为TTY设备文件。例如,/dev/tty1 表示第一个物理终端设备。

TTY在现代操作系统中仍然用于表示终端设备或终端仿真器。它提供了用户与系统进行交互的接口,用户可以通过TTY设备文件与系统进行通信,输入命令并获取命令的输出。

2.PTY(Pseudo-Terminal):

PTY 是一种虚拟终端设备,它是在操作系统中模拟出的终端。它不是物理设备,而是一对相互连接的虚拟设备:主设备(Master)和从设备(Slave)。主设备充当终端仿真器(例如终端窗口),而从设备通常与应用程序或进程相关联。

PTY 的作用是允许应用程序通过仿真的终端接口与用户进行交互。例如,当你在终端窗口中打开一个新的终端会话时,实际上正在创建一个虚拟的PTY设备对,并将应用程序连接到该虚拟终端。应用程序可以像在物理终端上一样运行,并与用户进行交互。

PTY 的典型应用场景是远程登录和终端仿真器。它可以在计算机之间建立虚拟终端会话,使用户能够通过网络使用远程计算机的终端功能。

综上所述,TTY 是指物理或虚拟的终端设备,而 PTY 则是一对虚拟终端设备,用于模拟终端功能并允许应用程序与用户进行交互。这些概念在Linux系统中起到重要作用,为用户提供了命令行界面和终端仿真的功能。

三、终端的类型

1.虚拟终端(Virtual Terminal):

虚拟终端是计算机系统中模拟的终端设备。它通常是在图形界面环境中提供的虚拟终端窗口,以便用户可以在其上执行命令行操作。虚拟终端允许用户在同一台计算机上同时运行多个终端会话,每个会话都有自己的命令提示符,可以独立地执行命令和程序。

在Linux系统中,你可以使用快捷键(例如Ctrl + Alt + F1到F6)切换到不同的虚拟终端,其中F7一般是用于图形界面。每个虚拟终端都可以登录不同的用户,并在其上执行命令。

2.串口终端(Serial Terminal):

串口终端是通过串行通信接口连接到计算机的终端设备。串口终端通常与外部设备(如路由器、嵌入式系统等)进行通信,通过串行端口传输数据。它提供了基于字符的通信接口,允许用户通过串口与设备进行交互。

串口终端通常使用串行通信协议(如RS-232)进行通信,并使用特定的串口参数(如波特率、数据位、停止位等)进行配置。用户可以通过串口终端向设备发送命令或接收设备发送的数据。

3.终端模拟器(Terminal Emulator):

终端模拟器是在计算机上模拟终端功能的程序。它允许用户在图形界面中打开一个窗口,提供一个虚拟终端环境,用户可以通过该环境执行命令和操作。

终端模拟器在图形界面中显示由命令行程序输出的文本,并接收用户输入的命令。它模拟了终端设备的功能,通常支持ANSI转义序列和众多的命令行特性(如命令自动补全、滚动、分屏等)。一些常见的终端模拟器包括Linux下的gnome-terminal、konsole和Mac下的Terminal.app等。

4.伪终端(Pseudo-Terminal):

伪终端是一对相互连接的虚拟设备(主设备和从设备),用于模拟终端功能。它不是物理设备,而是在操作系统中虚拟出来的。

伪终端常用于通过网络远程登录计算机或将应用程序连接到模拟的终端界面。例如,当你通过SSH远程登录到一台计算机时,实际上创建了一个伪终端会话,你可以在其中执行命令并与计算机进行交互。

综上所述,虚拟终端是计算机中模拟的终端设备,串口终端是通过串口连接的外部设备,终端模拟器是程序中模拟的终端环境,而伪终端是模拟终端功能的虚拟设备。它们各自在不同的场景和应用中发挥着重要的作用。

伪终端示意图:

四、Gnome Terminal伪终端

当你在Gnome Terminal中打开一个终端窗口时,实际上你会看到一个伪终端(pseudo-terminal)。伪终端是一个软件实体,它模拟了物理终端的功能,并允许你与操作系统进行交互。

Gnome Terminal中的伪终端提供了一个可视化的用户界面,使你可以在一个图形化的窗口中执行命令行操作。这意味着你可以像在物理终端上一样输入命令、运行程序,并查看命令的输出结果。

伪终端在底层工作原理上使用了一些重要的技术,包括以下几个组成部分:

伪终端设备(Pseudo-Terminal Device):伪终端设备是伪终端的核心组成部分。它由两个虚拟的终端设备组成,一个是主设备(Master Device),用于与用户交互,另一个是从设备(Slave Device),用于与操作系统交互。Gnome Terminal通过使用伪终端设备来模拟终端行为和交互。

控制字符:伪终端通过发送控制字符来控制终端行为。例如,当你在终端中按下Enter键时,会发送一个回车字符(\r)给操作系统,以指示输入命令的结束。控制字符可以用来控制光标移动、清屏、改变文本样式等操作。

输入/输出处理:伪终端还负责处理输入和输出。当你在终端中输入命令时,伪终端将其发送给操作系统进行处理。操作系统将执行相应的命令,并将输出结果发送回伪终端,最终在终端窗口中显示出来。

通过伪终端,Gnome Terminal提供了一个方便、易于使用的界面,使你能够在图形化环境下执行命令行任务。你可以通过键盘输入命令,观察命令的执行结果,并与操作系统进行交互。伪终端的使用使得在Linux系统上进行命令行操作变得更加直观和友好。

熟悉的伪终端:

总结

本篇文章就讲解到这里,下一篇文章我们来实战编写实习伪终端的代码。


相关文章
|
4月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
410 3
Linux系统禁用swap
|
4月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
902 3
|
5月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
5月前
|
存储 Ubuntu Linux
「正点原子Linux连载」第二章Ubuntu系统入门
在图2.8.2.4中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/mnt/tmp的时候发现里面没有任何文件了,说明我们卸载成功了。
|
3月前
|
监控 关系型数据库 MySQL
在CentOS系统中,如何统计哪个进程打开了文件描述符?
利用上述方法,你可以有效地监控和统计CentOS系统中的进程打开的文件描述符数量,以帮助排查错误或优化系统配置。通过组合使用各种工具和命令,可以获得对系统状态和行为的深入了解,进而做出相应的调整和
205 5
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
518 0
Linux系统初始化脚本
|
5月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
371 18
|
4月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
451 1
|
4月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1130 1
|
5月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1831 10