在麒麟操作系统中,查询当前正在运行的服务,最精准的方法就是使用 systemctl list-units --type=service --state=running。这个命令仅显示被 systemd 加载且状态为 active (running) 的服务,自动排除 inactive、failed 或未被加载的单元。换句话说,它展示的是真正在后台运行的服务,做到所见即所得。

之所以首先推荐这个方法,是因为你需要快速确认麒麟OS中哪些服务确实在后台运行,而不是仅仅看它们是否被安装或设为开机自启——这两者有本质区别。有些服务虽然已启用,但并未真正启动;有些因异常崩溃后,systemd 可能仍错误地标记为 active 状态,给你造成错觉。
使用 systemctl list-units 查看麒麟OS实时运行的服务
这是最直接、最可靠的路径。打开终端(快捷键 Ctrl+Alt+T),输入以下命令:
systemctl list-units --type=service --state=running
输出结果中,每一行包含多列信息:第一列为服务名称(如 sshd.service),第二列为加载状态(loaded),第三列为激活状态(active),第四列为子状态(running)。关键在于——只有第三列为 active、第四列为 running 的服务,才属于真正运行中的服务。其他组合要么未启动,要么已退出。
如果想同时查看服务的描述信息,可以加上 --all 参数:systemctl list-units --type=service --state=running --all。这样输出更完整,但核心筛选逻辑不变。
用 systemctl --type=service --state=running 快速筛选
本命令本质上与上一条相同,但写法更精简,适合脚本调用或快速复核结果。在终端中输入:
systemctl --type=service --state=running
注意,该命令不会显示 failed 或 activating 状态的服务,也不会列出 socket、timer 等非服务类型的单元。如果看到某服务名后跟着 (running),说明它当前处于工作状态;若显示 (exited),即使激活状态是 active,也只代表主进程已退出,仅留一个空壳挂在系统中。
用 service --status-all 兼容旧环境(谨慎使用)
部分深度定制版的麒麟OS(如某些政务专用镜像)仍保留了 SysV init 兼容层。此时可用 service --status-all 粗略扫描服务的开关标识。命令如下:
service --status-all
输出中,以 + 开头表示该服务脚本存在且正在运行,- 表示存在但未运行,? 表示状态不确定。但有一个重要陷阱:该命令不经过 systemd,因此无法反映由 systemd 托管但未通过 /etc/init.d 启动的服务的真实状态。例如,nginx.service 如果通过 systemctl start 启动,在此处可能显示为 ? 或 -,容易导致误判。
若执行时提示 bash: service: command not found,说明系统已移除 sysvinit 兼容包,此时应直接返回 systemctl 方案。
用 ps 辅助验证关键服务进程是否存在
有时 systemctl 显示某服务为 active (running),但业务却无响应。此时需进一步确认其主进程是否真实存活——避免因 systemd 状态未同步或服务变成僵尸进程而误导判断。
操作分两步:
第一步,找出服务对应的主进程名称。例如 sshd.service 的进程名通常为 sshd,mysqld.service 对应 mysqld,kylin-kms-activation.service 对应 kylin-kms-activation。
第二步,执行过滤命令(注意使用 grep 的字符匹配技巧,避免将 grep 自身计入):
ps aux | grep '[s]shd'
检查输出结果:若有非 grep 的行,且包含 /usr/sbin/sshd 或 /usr/bin/sshd 等路径,说明进程真实存在;若只有 grep 那一行,则进程已终止,但 systemd 状态尚未刷新。
此步骤仅作为交叉验证,不能替代 systemctl。例如 dbus-daemon 虽然在 ps 中可见,但属于系统核心守护进程,不可随意执行 kill 操作。
