同时运行多个sudo'd命令

时间:2017-03-05 05:24:47

标签: zsh sudo

我再次被过时的缓存所困扰。我终于厌倦了查找所有缓存重建命令,并决定自己编写一个简短的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

为什么呢?我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

所以我从未弄清楚为什么会这样。我最好的猜测是sudo正在尝试锁定的某些资源,sudo的两次调用会让它竞争。无论如何,我已经使用了以下修改后的recache函数一段时间没有遇到任何问题。主要区别在于,只有一个背景sudo,它并行运行updatedbldconfig,而不是每个进程有一个背景sudo

recache() {
    sudo true
    sudo zsh -c 'updatedb & ldconfig & wait' &
    local pid=$!
    rehash
    wait $pid
}