如何禁用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




