2017-03-05 18 views
0

私は再び古くなったキャッシュに噛まれました。私は最終的にすべてのキャッシュ再構築コマンドを調べるのにうんざりし、私が知っているすべてのことを行うための短いzsh関数を書くことに決めました。ここで私は現時点で持っているものです:複数のsudoのコマンドを同時に実行しています

recache() { 
    sudo true 
    sudo updatedb & 
    local updatedbpid=$! 
    sudo ldconfig & 
    local ldconfigpid=$! 
    rehash 
    wait $updatedbpid $ldconfigpid 
} 

最初sudo trueは、以下のバックグラウンド・プロセスは私が私を入力するための入力待ちに懸架座っていないように、sudoは最近のタイムスタンプを持っていることを確認することを意図していますパスワード。 sudo -bを使用しない理由は、作業を続ける前にキャッシュが最新になるまでwaitにしたいからです。

ほとんどの場合、これは大変効果的です。 3回ほどで約1回、次のテキストを無限にコピーします。

[2] + suspended (tty output) sudo updatedb 

なぜですか?それを修正するために私は何ができますか?

答えて

0

私はこれがなぜ起こったのか決して解明しませんでした。私の最高の推測では、sudoがロックしようとしているリソースがあり、その2つの呼び出しはsudoです。いずれにせよ、私はしばらくの間、次の変更されたrecache関数を問題なく使用してきました。主な違いは、バックグラウンドが1つだけのsudoであり、プロセスあたり1つのバックグラウンドのsudoではなく、updatedbldconfigの両方を並列に実行することです。

recache() { 
    sudo true 
    sudo zsh -c 'updatedb & ldconfig & wait' & 
    local pid=$! 
    rehash 
    wait $pid 
} 
関連する問題