shell “man -k ^”导致严重减速的问题

ds97pgxw  于 2023-05-01  发布在  Shell
关注(0)|答案(1)|浏览(102)

这开始于我看到我的emacs man-mode慢得可疑,我发现每当我键入M-x man RET [number]时,emacs都会在命令行上调用man -k ^man -k^[number]。时间和wc输出有点荒谬:

% time man -k ^ | wc 
makewhatis: /Library/TeX/texbin/man: Not a directory
   12434  101864  923700
man -k ^  0.67s user 1.40s system 103% cpu 1.991 total
wc  0.01s user 0.02s system 1% cpu 1.990 total

为什么总时间接近2秒,而操作似乎花费了约0。03秒?我相信这可能是导致严重减速的原因,我想在我的系统中找到这个膨胀的底部。MacOS Ventura。

ibrsph3r

ibrsph3r1#

你需要明白你在看什么。
man -k ^3将在整个man数据库中搜索每个摘要以3开头的手册页(没有)。man -k ^将简单地输出所有摘要。这是一个开销适中的操作,特别是当man需要在后台重建索引时。然而,处理的主要部分是在阅读和可能写入索引时等待磁盘,并缓冲它写入的输出,因此最终不会消耗大量CPU。
wctime输出显然只考虑了处理man输出所花费的时间,这是微不足道的。
显然您使用的是Zsh,它在time输出中不包含“真实的”时间。在我的系统上,重复运行man -k ^后,整个过程大约需要10秒,但除此之外,它只消耗了大约5秒的CPU时间(0.8s用户+4s系统)。
最后,我们必须问为什么在M-x man之后输入一个数字,以及您希望最终完成什么。如果您确实需要所有已安装手册页的列表,或者特定部分中的所有手册页的列表,则需要一些时间。
(On我的系统,M-x man <RET> 3 <RET>只输出一些内部垃圾,看起来像man内部shell脚本,重新格式化。)

相关问题