プロセスを実行し、出力を行ごとに解析するbashスクリプトを書き込もうとしています(hereなど)。Bash - プロセスpidを取得し、出力を行ごとに解析します。
私はpsを実行してCPUとメモリの使用量を得ることができる(そして出力行でそれらを印刷する)各行に対してプロセスPIDを取得したいと思います。
バックグラウンドでプロセスを実行すると、$!
でPIDを取得できますが、出力を読み取る方法がわかりません。事前
プロセスを実行し、出力を行ごとに解析するbashスクリプトを書き込もうとしています(hereなど)。Bash - プロセスpidを取得し、出力を行ごとに解析します。
私はpsを実行してCPUとメモリの使用量を得ることができる(そして出力行でそれらを印刷する)各行に対してプロセスPIDを取得したいと思います。
バックグラウンドでプロセスを実行すると、$!
でPIDを取得できますが、出力を読み取る方法がわかりません。事前
で
ありがとうございます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}"
をチェックしてください。これは実際には素晴らしい答えです。このFIFOのこと。役に立つかもしれない。 –
行をリアルタイムで処理したい場合は、プロセスをバックグラウンドで開始する必要があります。そうしないと、プロセスが終了するまで待たなければなりません。それが欲しいのであれば、https://stackoverflow.com/questions/20017805/bash-capture-output-of-command-run-in-background –