Ubuntu 20.04 使用 GLib spawn 命令和 pgrep 扩展时会滞后

Ubuntu 20.04 使用 GLib spawn 命令和 pgrep 扩展时会滞后

当我在 GNOME 3.34 的 19.10 上时,我可以使用 GLib 多次生成命令而不会导致 GNOME shell 或任何应用程序出现任何延迟。但是在 GNOME 3.36.1 的 20.04 上,即使是一个简单的生成命令也会给整个 GNOME shell 甚至应用程序造成一些延迟。

为了向您展示我如何做到这一点,我创建了这个简单的 GNOME shell 扩展:

const Mainloop = imports.mainloop;
const GLib = imports.gi.GLib;

let timeout;

function init(){
}

function enable(){
    timeout = Mainloop.timeout_add_seconds(1.0,() => {
      var [ok, out, err, exit] = GLib.spawn_command_line_sync('pgrep Discord');
      log('Discord is running');
      return true;
    });
}

function disable(){
    Mainloop.source_remove(timeout);
}

为什么会出现这种延迟?我该如何修复此代码的延迟问题?

答案1

pgrep在 Ubuntu 20.04 中运行速度极慢。运行时间与堆栈限制成线性关系(ulimit -S -s检查),即使在快速机器上也很容易达到 30 秒。如果没有堆栈限制,任何pgrep调用都将失败:

cannot allocate 4611686018427387903 bytes

Ubuntu(Debian、Archlinux)的 Bug 报告已开放,但未看到任何流量。请考虑标记您也受到了影响:https://bugs.launchpad.net/ubuntu/+source/procps/+bug/1874824

这个错误已经在 procps 中修复,但是发行版并没有发现它......

相关内容