You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何禁用Okular缓存或关闭其命令行延迟输出?

解决Okular从zsh启动后延迟输出、进程停滞的问题

我之前也碰到过一模一样的情况,这种退出程序后终端还被占着、甚至突然蹦出一堆内容打乱输入的问题,真的挺影响命令行使用体验的。下面几个实用的方法可以帮你解决:

1. 启动时直接重定向所有输出(最直接有效)

启动Okular的时候,把它的标准输出和错误输出全部重定向到/dev/null(相当于“黑洞”,直接丢弃所有输出),同时让程序后台运行。这样不管Okular退出后有没有延迟输出,都不会显示在你的终端里,也不会卡住进程。

用这个命令启动:

okular <你的文件路径> >/dev/null 2>&1 &
  • >/dev/null:把程序的正常输出(stdout)丢弃
  • 2>&1:把错误输出(stderr)也重定向到和正常输出一样的地方,也就是一起丢弃
  • &:让Okular在后台运行,这样你可以继续在终端输入其他命令

2. 禁用Okular的崩溃处理程序(针对特定输出)

有时候Okular退出时的延迟输出来自它的崩溃处理模块,即使程序正常退出,这个模块也可能会输出一些调试信息。你可以用--nocrashhandler参数禁用它:

okular <你的文件路径> --nocrashhandler >/dev/null 2>&1 &

这个参数会关闭Okular的崩溃报告功能,减少不必要的后台操作和输出。

3. 修改Okular的缓存设置(减少后台清理操作)

如果确实想禁用缓存,可以打开Okular的设置界面:

  • 点击顶部菜单栏的设置 -> 配置Okular
  • 切换到性能标签页
  • 找到文档缓存相关的选项,比如取消勾选保留文档缓存或者把缓存大小设为0
  • 另外,也可以看看高级标签页里有没有日志输出相关的开关,关掉它

不过要注意,禁用缓存可能会让Okular打开大文件的速度变慢,所以这个方法可以根据你的使用场景选择。

为什么会出现这个问题?

本质上是Okular在正常退出后,还有一些后台线程在处理缓存清理、日志写入或者崩溃报告的收尾工作,这些线程会延迟输出信息。而zsh会等待前台进程的所有输出完成才会回到提示符,所以就导致了进程停滞,需要手动用Ctrl+C打断的情况。

内容的提问来源于stack exchange,提问作者Schoenix

火山引擎 最新活动