我再次被过时的缓存所困扰。我终于厌倦了查找所有缓存重建命令,并决定自己编写一个简短的zsh函数来完成我所知道的所有事情(当我发现它们可以进入这里时)。这就是我现在所拥有的:
recache() {
sudo true
sudo updatedb &
local updatedbpid=$!
sudo ldconfig &
local ldconfigpid=$!
rehash
wait $updatedbpid $ldconfigpid
}
第一个sudo true
旨在确保sudo
具有最近的时间戳,以便在输入等待我输入密码时,以下后台进程不会暂停。我不使用sudo -b
因为我想wait
,直到缓存更新才能继续我的工作。
大多数时候,这很有效;但大约三次左右,我得到以下文字的无尽副本:
[2] + suspended (tty output) sudo updatedb
为什么呢?我该怎么做才能解决它?
答案 0 :(得分:0)
所以我从未弄清楚为什么会这样。我最好的猜测是sudo
正在尝试锁定的某些资源,sudo
的两次调用会让它竞争。无论如何,我已经使用了以下修改后的recache
函数一段时间没有遇到任何问题。主要区别在于,只有一个背景sudo
,它并行运行updatedb
和ldconfig
,而不是每个进程有一个背景sudo
。
recache() {
sudo true
sudo zsh -c 'updatedb & ldconfig & wait' &
local pid=$!
rehash
wait $pid
}