麒麟系统中顽固进程需分阶处理:先验证是否真存在及权限,再用kill -stop+kill -9双阶段终结;d状态须卸载挂载点或内核模块;systemd服务应重启单元;cgroup v2可冻结剔除。

麒麟系统中进程已僵死、屏蔽信号或陷入内核不可中断状态时,常规kill命令失效,进程持续占用CPU或内存,必须用更底层手段强制剥离其资源绑定并从进程表中彻底清除。
先确认进程是否真顽固
打开终端(Ctrl + Alt + T),执行:
ps -p PID
若无任何输出,说明该进程早已自行退出,你正在对一个“幽灵PID”重复操作;若仍有输出,再看STAT列——如果显示D(uninterruptible sleep)或Z(zombie),才属于真正顽固类型,必须走后续路径。
别急着杀,先验证它是不是你自己启动的。执行:
ps -o pid,user,comm -p PID
若USER列不是你当前用户名,而是root或daemon,且COMMAND是systemd-journald、kthreadd、rcu_gp这类内核线程,【立刻中止所有操作,误杀将导致桌面崩溃】。
用kill -STOP + kill -9双阶段终结
某些进程会拦截SIGTERM和SIGKILL,但无法屏蔽SIGSTOP——这是唯一能强行冻结它的信号。
第一步:发送暂停指令
kill -STOP PID
第二步:立即补上终结信号
kill -9 PID
这一步必须在STOP发出后1秒内执行,否则进程可能在暂停间隙恢复运行并再次屏蔽信号。
第三步:验证是否消失
ps -p PID
若仍存在,说明它已进入D状态,需跳转至下一环节。
针对D状态进程:卸载依赖模块或重启子系统
D状态(不可中断睡眠)通常因进程卡在磁盘IO、NFS挂载或驱动层,此时kill -9无效,必须解除其阻塞源头。
方法一:检查是否被挂载点锁死
执行:
lsof +D /path/to/mount/point
若输出含目标进程PID,说明它正等待某块硬盘响应;此时执行:
sudo umount -l /path/to/mount/point
-l参数为lazy unmount,可强制断开挂载而不等IO完成。
方法二:定位并卸载异常内核模块
执行:
cat /proc/PID/stack
若输出中出现+0x0/0x0类似地址及模块名(如xxx_driver),记下模块名;再执行:
sudo lsmod | grep 模块名
确认加载后,执行:
sudo rmmod 模块名
模块卸载瞬间,依附其上的D状态进程将自动消亡。
终极手段:用systemd-run隔离重启关键服务
当顽固进程是systemd托管服务(如dbus、avahi-daemon)的子进程,且kill -9完全无效时,不能硬杀父进程,而应让systemd主动重建整个服务树。
第一步:查清服务单元名
systemctl status PID | grep "Unit:" | awk '{print $2}'
第二步:触发服务重载
sudo systemctl kill --signal=SIGKILL 单元名
该命令向整个服务单元发送SIGKILL,比直接杀PID更彻底,会连带清理所有fork出的子进程。
第三步:立即重启服务维持功能
sudo systemctl restart 单元名
例如:sudo systemctl restart dbus.service
注意:若单元名含@符号(如getty@tty1.service),必须完整复制,漏掉@会导致重启失败。
用cgroup v2冻结并剔除进程
适用于麒麟V10 SP1及以上内核5.10+版本,可绕过传统信号机制,从资源调度层直接摘除进程。
第一步:创建临时控制组
sudo mkdir -p /sys/fs/cgroup/killzone
echo $$ | sudo tee /sys/fs/cgroup/killzone/cgroup.procs
第二步:将目标进程移入该组
echo PID | sudo tee /sys/fs/cgroup/killzone/cgroup.procs
第三步:冻结并强制剔除
echo "frozen" | sudo tee /sys/fs/cgroup/killzone/cgroup.freeze
echo 1 | sudo tee /sys/fs/cgroup/killzone/cgroup.kill
这三行命令执行完,进程会从ps列表中立即消失,且不会留下zombie残留。











