解决 Pipewire 被 SIGKILL 的问题 的插图

解决 Pipewire 被 SIGKILL 的问题

症状 我频繁遇到 Pipewire 音频框架突然停止运行的情况: 问题通常出现在我的笔记本电脑连接/断开电源的时候,此时我的电脑会因为切换性能模式卡顿一小段时间; systemctl --user status pipewire.service 只能看到 Pipewire 进程被 SIGKILL 信号终止,没有其它有用的日志信息; coredumpctl 和 dmesg 里也找不到 Coredump 内存转储事件的记录。 原因 Pipewire 进程运行时具有实时优先级,其调度需求被最优先满足,以便及时处理音频数据,避免音频卡顿。Pipewire 提高进程优先级是通过它的 libpipewire-module-rt 模块请求系统中以 root 权限运行的 RTKit (Realtime Kit)服务,然后 RTKit 以特权修改进程优先级来达成的。 但是,如果一个具有实时优先级的进程出了 Bug,进入了死循环,那么它会占用所有的 CPU 资源。系统上绝大部分其它进程(包括但不限于 SSH 服务端,Xorg,还有你的 Shell)由于优先级更低,就无法得到任何 CPU 时间片,无法处理任何任务,...