每当 xdg-open 遇到没有与之关联的默认应用程序的文件时,它都会自行分叉。此过程会递归重复,直到被终止。在执行此操作时,它当然会占用我所有的 CPU 和内存。这似乎是一个罕见的问题,因为 Google 对此了解不多。可能需要注意的是,这种情况发生在多种文件类型上。
我正在运行 Manjaro Linux,使用 Awesome WM 和 fish 作为我的 shell,如果这有什么不同的话。
答案1
检查 BROWSER 环境变量的值。在大多数 shell 中,这是通过 完成的echo $BROWSER
。如果设置为/usr/bin/xdg-open
,则问题就出在这里。
当 xdg-open 尝试打开网址时,它不会使用 xdg-mime 的默认设置,而是使用 BROWSER 变量中的命令。由于该命令是 xdg-open 本身,因此它会无限分叉。
清空此变量可解决问题。对于 bash,它可能/usr/bin/xdg-open
在 中设置为~/.bashrc
,使用类似 的行BROWSER=/usr/bin/xdg-open
。删除该行,问题就解决了。
我认为 xdg-open 也使用浏览器作为默认的打开应用程序,导致每次处理未知文件时都会出现相同的 CPU 消耗过程。
此外,安装perl-file-mimeinfo
并重新启动可能会有帮助。
感谢 MariusMatutiae 提供的链接帮助我回答了我自己的问题。
答案2
xdg-mime
这是由(软件包的一部分)中的以下错误引起的xdg-utils
:
https://gitlab.freedesktop.org/xdg/xdg-utils/issues/131
如果您有任何包含空格的 *.desktop 文件,则可能会导致 xdg-mime 在您的整个主目录或文件系统上进行递归,从而导致其消耗大量 CPU 并挂起。修复已提交给 xdg-utils,维护人员应将其打包。
在等待时,您可以通过编辑 xdg-mime 脚本简单地添加缺失的一对引号就像在拉取请求中一样:
这发生在函数中search_desktop_file()
,在 1.1.3 中的第 930 行添加这些引号,在以下块中xdg-utils
添加引号:$dir
for f in "$dir"/*/; do
[ -d "$f" ] && search_desktop_file "$MIME" "$f"
done
这是导致其他应用程序(例如 Discord)多年来出现许多错误的原因,它以黑屏启动并产生一个消耗大量 CPU 的进程,而 Discord 则等待它退出:
xdg-mime query default x-scheme-handler/spotify
维护人员,请更新 xdg-utils!