2017-11-13 5 views
1

プロセスを実行し、出力を行ごとに解析するbashスクリプトを書き込もうとしています(hereなど)。Bash - プロセスpidを取得し、出力を行ごとに解析します。

私はpsを実行してCPUとメモリの使用量を得ることができる(そして出力行でそれらを印刷する)各行に対してプロセスPIDを取得したいと思います。

バックグラウンドでプロセスを実行すると、$!でPIDを取得できますが、出力を読み取る方法がわかりません。事前

+1

行をリアルタイムで処理したい場合は、プロセスをバックグラウンドで開始する必要があります。そうしないと、プロセスが終了するまで待たなければなりません。それが欲しいのであれば、https://stackoverflow.com/questions/20017805/bash-capture-output-of-command-run-in-background –

答えて

2

ありがとうございますFIFOを作成し、バックグラウンドプロセスが実行されている間ことを読み取ることができます。あなたが読んだ行ごとに、child_pidで何でもできます。 (多分TMP /で、いくつかのパスを選択します)

tmp_fifo="/tmp/my_fifo" 
rm "${tmp_fifo}" &>/dev/null 
mkfifo "${tmp_fifo}" 

バックグラウンドでプロセスを起動し、への出力をリダイレクト

bgp() { sleep 1; echo 1; sleep 1; echo 2; sleep 1; echo 3; } 

はその後FIFOを作成します。

まず私たちは、小さなサンプルプログラムを必要としますFIFO:

子プロセスが終了するまで出力を読み込みます。

while true; do 
    if jobs %% >&/dev/null; then 
     if read -r -u 9 line; then 
      # Do whatever with $child_pid 
      echo -n "output from [$child_pid]: " 
      echo $line 
     fi 
    else 
     echo "info: child finished or died" 
     break 
    fi 
done 9< "${tmp_fifo}" 
+0

をチェックしてください。これは実際には素晴らしい答えです。このFIFOのこと。役に立つかもしれない。 –

関連する問題