2017年1月10日火曜日

Linux パイプでの並行処理、戻り値について

コマンドの実行結果をもう1つのコマンドの引数として渡すために、パイプ( | )をよく使います。
例えば、実行中の全プロセスを表示(ps -ef)した結果から、単語(nfsd)のみを抽出(grep)する場合は、以下のコマンドを実行します。
    ps -ef | grep nfsd

パイプの使い方として、上記のように引数を渡すためではなく、(パイプの右側のコマンドが引数を必要としない場合に限りますが)並列処理を実行させることができます。
例えば、2つのシェルスクリプト(test1.shとtest2.sh)を並列(同時)に実行する場合は以下のように実行すします。
    time ./test1.sh | time ./test2.sh

いくつのコマンドまで並列処理で実行して処理が速くなるかはコア数にも依りますが、大概の場合は速くなります。

パイプを使った場合に取得できるコマンドの戻り値は、パイプの一番右のコマンドの戻り値のみとなります。そのため、(パイプを使うことを想定した際の一番右以外の)コマンドでエラーハンドリングしたい場合は、パイプが使えません。

パイプは非常に便利ですが、使い方次第です。

ご指摘、ご質問などはコメントへお願いします。

0 件のコメント:

コメントを投稿