PS検索が消える前にログから一時PIDを取得する

PS検索が消える前にログから一時PIDを取得する

監査ログを記入する一時的な事前接続プロセスがありますが、そのプロセスが何であるかわかりません。エラーログはPIDを提供しますが、間違っているとプロセスが終了するように見えるため、すぐに消えます。

私が望むのは、テールログを作成し、PIDをgrepして「ps -p」または「ps -ef |」にポンピングすることです。 PIDをgrep '。

私がこれまでに得たものは次のとおりです。

ps -p $(tail -f /var/log/audit/audit.log | grep 'comm="prelink"' | grep -o 'pid=[0-9]* ' | grep -o [0-9]*)

しかし、シェル拡張は更新されていないようです。つまり、コマンドを実行してログの最後のエントリで見つかったPIDが1234であると仮定すると、psはそのエントリを検索するだけで更新しません。

tailの出力をPSで無限に繰り返すか、PSでgrepingするさまざまなバリエーションを試しましたが、進歩はありませんでした。更新されたタイミングを確認するために別のウィンドウでログのtail -fを実行しましたが、そのPIDのPSを取得するコマンドが応答しませんでした。

誰でも私がやろうとしていることを達成する方法を提案できますか?

また、これを行うための非常に簡単で、よりよく、より確実な方法はありますか?私は経験がなく、仕事を複雑にする習慣があります。だから「なぜXだけしてはいけないのですか?」があるなら自由に投げてみてください!

とても感謝しています!雨。

ベストアンサー1

のような表現は常に引用しなければなりません[0-9]*

tail -f /var/log/audit/audit.log |
  grep --line-buffered 'comm="prelink"' |
  grep --line-buffered -o 'pid=[0-9]* ' |
  grep --line-buffered -o '[0-9]*' |
  while read pid; do
    ps -p "$pid"
  done

tail -f出力をバッファリングしません。他のアプリケーションでは、unbufferまだstdbuf問題は解決されます。

おすすめ記事