2016-05-18 10 views
0

私はsucklessii ircクライアントを使用しようとしています。 tail -f outファイルでチャンネルを聴くことができます。しかし、echoまたはcatコマンドを起動して同じコンソールに入力することも可能ですか?プロセスの出力として同じコンソールを接続し、別のプロセスの入力を使用する方法は?

私のバックグラウンドプロセスは、それが実際にこのコンソールに出力を表示しますが、それは正しい方法ではないようですか?論理的には、私はコンソールのfdを取得する必要があると思いますが(それを行う方法)、そのfdにテール出力を強制し、おそらくそれをバックグラウンドにします。そして、現在のbashを使ってcat > inを起動してください。

は、これを行うには、実際に大丈夫ですか、私は単純な作業のためのプロセスのオーバーヘッドの多くを作成していますということですか?言い換えれば、多くのものを配管するのはいいですが、それは多くのオーバーヘッドを生み出します。それは、その作業をたくさん繰り返すことが理想的です。

答えて

1

エコーやcatコマンドを起動して同じコンソールに入力することもできますか?

単純にNO! catは現在のコンテンツを書き込みます。 catはコンテンツが後で成長することは知らない。 echoは、与えられたコマンドラインから変数と結果を書き出します。エコー自体はファイルの内容を書くために作られていません。

プロセスをバックグラウンドで実行した場合、実際にはこのコンソールに出力が表示されますが、それは正しい方法ではありませんか?

出力をリダイレクトしないと、出力はコンソールに送られます。つまり、論理的に、私は、コンソールのFD(しかし、どのようにそれをする)を取得する必要があると思う

:-)に設計し、そのFDにテール出力を強制されている方法と、おそらく背景もあります。

私は反対の方向であることを理解したよう。プロセスからstdinに書き込む場合は、パイプを使用するだけです。 (役に立たない)例は、catがパイプに書き込みを行い、次のコマンドがパイプから読み込むことを示しています。他のパイプ読み取り/書き込みシナリオにも拡張できます。下記のリンクを参照してください。

例:

cat main.cpp | cat /dev/stdin 
cat main.cpp | tail -f 

それはパイプが起こることはありませんより多くのコンテンツを取得することを待っているので、最後の1が、終了しません。

実際にこれを行うのは問題ないのですか、単純なタスクのために多くのプロセスオーバーヘッドを作成していますか?言い換えれば、多くのものを配管するのはいいですが、それは多くのオーバーヘッドを生み出します。それは、その作業をたくさん繰り返すことが理想的です。

あなたの仕事がどのくらい時間が重要か分かりませんが、オーバーヘッドはかなり低いと思います。自己書かれたprogで同じことをするのは早くてはいけません。すべてが単一のプロセスで実行され、ファイルシステムへのアクセスが必要ない場合は、はるかに高速になります。しかし、システムコールも使用しているとします。ファイルシステムのアクセス、それは私が信じてはるかに高速ではありません。あなたはいつもあなたが得る仕事のためにお金を払わなければなりません。

IOリダイレクションのために読んでください: http://www.tldp.org/LDP/abs/html/io-redirection.html

をあなたのシナリオがより複雑である場合は、代わりにIOリダイレクションの名前付きパイプを考えることができます。そのために、あなたは見て持つことができます:はい、それはすべてのシステムの束までに沸騰 http://www.linuxjournal.com/content/using-named-pipes-fifos-bash

+0

をので、オーバーヘッドを分析するための良い方法はthatsの呼び出しを:) – Nishant

+1

@Nishant:Simlplyは、アイデアを得るために 'strace'を使用オーバーヘッドとコール量の – Klaus

関連する問題