プロセスの実行中にパイプを編集する方法はありますか?

プロセスの実行中にパイプを編集する方法はありますか?

私は時々次のプロセスを使用します。

  • スロースタート
  • しばらく走る
  • 大量の情報を標準出力に書き込む

たとえば、これが大規模なWebアプリケーションであるとします。

さて、当分の間は包含内容を見たいと仮定しますfoo。結局、次のようなことができます。

$ heavy_process
# watch for a bit
# ah, now I just want to see lines that contain 'foo'
# (kill heavy_process)

$ heavy_process | grep foo
# watch for a bit
# ok, I'm statisfied about foo. Let's look at bar instead
# (kill heavy_process)

$ heavy_process | grep bar

heavy_process本当に変えたいとき| grep

コマンドラインからパイプライン内で「パイプを追加および削除する」方法はありますか?

ベストアンサー1

私の考えでは制御プロセス避けにくい。私はいろいろな方法を考えることができる。grep代わりに、コアに沿って動的パターンマッチングが動的にロードされawk '$0 ~ pat'ますpat(たとえば、GNU awkcoprocessを介して)。または基本パターン注入ソリューションモード変更awk次のように、フィルタがパターンを動的に簡単に調整できるように、ディレクティブがデータストリームに挿入されます。

mkfifo cmdfifo       # create once an asynchroneous communication channel

{ while read cmd < cmdfifo ; do printf "%s\n" "@$cmd" ; done &
  heavy_process ;} |
    awk '
        /^@/ { pat = substr($0,2) ; next }   # parse the injected pattern
        pat !="" && $0 ~ pat     # if pattern is set print matching lines
    '

検索 特定のモードを有効または切り替えるには、次を使用できます。

echo bar > cmdfifo

「bar」マッチングを有効にした後

echo foo > cmdfifo

モードを「foo」に動的に変更します。

おすすめ記事