必须用ps -ef查完整命令路径以识别隐藏后台进程,因其cmd列不截断,可暴露伪装进程的真实启动命令;再用ps -eo筛选tty为?的无终端进程,结合etime排序定位长期驻留的静默服务。

在麒麟操作系统中排查系统卡顿、异常发热或网络流量异常时,必须看到那些不显示在图形界面、不关联终端、也不出现在常规进程列表中的隐藏后台进程——它们可能是 systemd 服务、内核线程、容器守护进程或被 fork 后脱离控制终端的守护程序。
用 ps -eF 查看完整命令路径的全量进程
ps -aux 会漏掉部分长命令被截断的进程,而 ps -eF 能强制显示完整的 args 字段,包括带空格参数、路径过长或含环境变量展开的服务启动命令,这对识别伪装成正常进程的后台任务至关重要。
打开终端,执行:ps -eF
注意观察 CMD 列:若某进程的命令行以 /usr/bin/python3 -m http.server 或 /opt/app/launcher --daemon --no-console 形式出现,且 TTY 列为 ?,它极大概率是主动隐藏自身终端关联的后台服务。缺省的 ps -ef 会把这类命令截成 /opt/app/launcher...,无法判断真实意图。
用 ps -eo 筛选无终端、非交互式进程
真正隐藏的后台进程往往不绑定任何 TTY,也不响应用户输入,它们通过 setsid 或 double-fork 技术彻底脱离会话。这类进程在 ps 输出中 TTY 列恒为 ?,且 STAT 状态多为 S(休眠)或 I(内核线程)。
执行命令:ps -eo pid,user,tty,stat,etime,args --sort=etime | grep ' \? '
该命令筛选出所有 TTY 为 ? 的进程,并按运行时间(etime)升序排列——排在最前面的是刚启动的隐藏服务,排在最后的是已运行数小时甚至数天的“老后台”。特别注意 etime 超过 86400(24 小时)且 %CPU 接近 0 的进程,它们常是定时唤醒型守护进程,极易被忽略。
检查 systemd 用户会话与未注册服务
systemd 不仅管理全局服务,还为每个登录用户维护独立的 user session,其中可能包含未在 /etc/systemd/system/ 下注册、却通过 systemctl --user 启动的私有服务。这些进程不会出现在 systemctl list-units --type=service --state=running 的输出中。
方法一:查看当前用户的全部 unit:systemctl --user list-units --all --type=service
方法二:列出所有活跃的用户 scope 和 service:systemd-cgls user.slice
若输出中出现类似 app-gnome-terminal@.service 或 dbus-:1.2-*.scope 的条目,说明有 GUI 应用派生的子服务正在后台持续运行。这些进程 PID 不会出现在 ps aux 的 USER 列为 root 或 sys 的上下文中,而是归属当前桌面用户,但完全静默无界面。
定位被删除但仍驻留内存的文件句柄进程
某些恶意或异常进程会通过 open() 打开一个文件后立即 unlink() 删除它,使文件名从磁盘消失,但文件内容仍驻留在内存并被进程独占——这种“幽灵文件”对应的进程在常规 ps 中不可见其真实用途,只能通过 fd 表反查。
第一步:查找所有持有已删除文件的进程:lsof +L1
第二步:对每个 PID 检查其完整命令行:ps -p PID -o pid,user,args
若发现某进程的 args 显示为 “











