应使用 who 命令查看实时登录会话,因其直接读取内核维护的 /var/run/utmp 文件,准确反映真实登录状态;w 命令可扩展显示进程负载;loginctl 适用于 systemd 环境下精细管理会话类型与状态;ps 命令作为备用方案,通过终端关联进程树反向验证。

你需要确认当前有哪些用户正通过本地或远程终端连接到麒麟系统,以便排查异常登录、管理会话或释放卡死的TTY。这一步必须基于内核实时维护的登录状态,不能依赖进程列表或用户目录存在性判断。
用 who 命令查看所有活跃终端登录用户
who 命令直接读取 /var/run/utmp 文件,该文件由系统内核在每次成功登录时写入、登出时清除,是唯一能反映“真实登录会话”的权威来源。
打开终端,输入:who 并回车。
输出格式为:用户名 终端类型 登录时间 远程主机地址(若为本地图形会话则显示 :0 或 tty1)。例如:kylinuser pts/0 2026-10-01 05:22 (192.168.1.102) 表示用户 kylinuser 正通过 SSH(伪终端 pts/0)从该 IP 登录;admin tty1 2026-10-01 04:15 表示 admin 在物理控制台 tty1 登录。
注意:who 不显示已 fork 出的子 shell 或 su 切换后的非登录 shell,只展示初始登录点。
用 w 命令查看登录用户及实时进程负载
w 是 who 的增强版,除列出登录终端外,还附加显示每个用户当前正在运行的命令、CPU 占用、登录时长等信息,适合快速判断会话是否异常活跃。
在终端中执行:w。
第一行显示系统运行时间、当前登录用户数、1/5/15 分钟平均负载;第二行起每行对应一个登录会话,字段依次为:用户名、终端、登录来源、登录时间、空闲时间、JCPU(该终端所有进程 CPU 时间)、PCPU(当前命令 CPU 时间)、当前命令。
若某用户终端显示 pts/3 但 PCPU 长期为 0 且无命令名,可能是已断开但未清理的僵尸会话——需结合 ps -t pts/3 进一步验证。
用 loginctl 查看 systemd 管理的所有会话
银河麒麟 V10 基于 systemd,loginctl 是其原生会话管理工具,可精确区分图形会话(seat0)、SSH 会话(remote)、容器会话等类型,并支持按状态筛选。
第一步:执行 loginctl list-sessions,列出所有会话 ID、UID、用户、类型、状态、TTY 等字段。
第二步:对任一会话 ID(如 c1),执行 loginctl show-session c1,可查看完整属性,包括 Type=wayland(图形)、Type=pty(终端)、State=active 或 State=closing。
第三步:若只需活跃会话,执行 loginctl list-sessions --state=active;若排除图形界面只看纯终端,加过滤:loginctl list-sessions | grep 'tty\|pts'。
【loginctl 输出中的 TTY 字段为空时,表示该会话不绑定物理或虚拟终端,如某些 Wayland 图形会话;此时不能用 who 或 w 捕获】。
用 ps 命令反向定位终端关联的登录进程
当 who/w/loginctl 显示不全(例如 utmp 被意外清空),可通过检查 init 进程的子进程树来还原登录路径。所有真实终端登录最终都会派生出一个带 -bash 或 /bin/sh 的登录 shell 进程,其父进程为 getty(本地)或 sshd(远程)。
执行:ps -eo pid,ppid,tty,comm,args --sort=tty | grep -E '(getty|sshd|login)'。
观察输出中 TTY 列非 ? 的行:tty1 对应本地控制台,pts/0 对应首个 SSH 连接,pts/1 对应第二个……每一行的 ARGS 列若含 -bash(开头带短横),即为该终端的登录 shell。
注意:此方法可能捕获到已退出但进程未回收的残留项,需结合 ps -o pid= -t tty1 查看该 TTY 当前是否有活跃进程 PID 来交叉验证。











