2017-03-05 83 views
0

我再次被過時的緩存咬了。我終於厭倦了查找所有的緩存重建命令,並決定寫一個簡短的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 

爲什麼?我能做些什麼來解決它?

回答

0

所以我從來沒有弄清楚爲什麼會發生這種情況。我最好的猜測是sudo正試圖鎖定一些資源,並且sudo的兩次調用都參與競爭。無論如何,我一直在使用以下修改的recache函數一段時間沒有問題。主要區別在於只有一個後臺接口sudo,它並行運行了updatedbldconfig,而不是每個進程的一個後臺sudo

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