同时运行多个sudo'd命令
问题描述:
我再次被过时的缓存咬了。我终于厌倦了查找所有的缓存重建命令,并决定写一个简短的zsh函数来完成我所知道的所有事情(并且我发现他们可以进入这里)。下面是我在此刻得到了:同时运行多个sudo'd命令
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
为什么?我能做些什么来解决它?
答
所以我从来没有弄清楚为什么会发生这种情况。我最好的猜测是sudo
正试图锁定一些资源,并且sudo
的两次调用都参与竞争。无论如何,我一直在使用以下修改的recache
函数一段时间没有问题。主要区别在于只有一个后台接口sudo
,它并行运行了updatedb
和ldconfig
,而不是每个进程的一个后台sudo
。
recache() {
sudo true
sudo zsh -c 'updatedb & ldconfig & wait' &
local pid=$!
rehash
wait $pid
}