2011-06-29 13 views
2

私のプログラムでは、execlで長寿命テール(-f付き)を実行しています。 execlの呼び出し後に何も実行されません。UNIXでのexeclの動作

私のプログラムで他のことができるようにバックグラウンドでこのテールをコール/実行する必要がありますか?

I CTRL C.

答えて

2

によって、私のプログラムのうち、通常の出口とman page for the exec family of calls開始:

機能の幹部の家族は 新しいプロセスイメージで 現在のプロセスイメージを置き換えます。

あなたが達成したいとは思っていませんが、execのように見えるのは解決策ではありません。あなたの最初のプログラムを生き続けるには、forkが必要です。あなたの初期プログラムはtail -fの出力で何かをしますか?

+0

ありがとうございます。はい、私はマニュアルページを読んで、私はこの質問を投稿しました。私はこの尻尾をバックグラウンドで実行し、私のプログラムでやり続けることを望みます。私が使うことができる他のライブラリ関数? – hari

+0

私は 'fork()'はあなたが望むことをやっていると信じています。一度それを呼び出すと、親プロセスの内部でプログラムをやり続け、子プロセスの中で 'execl()'を呼び出します。例については私の答えを見てください。 –

3

execl()が呼び出しプロセスに置き換わるので、呼び出された呼び出しプログラムはもう呼び出されません。

これを回避するには、fork()を呼び出した後にexecl()に電話することができます。フォークは2つのプログラム(親と子)を分割し、どちらが子プロセスで、どのプログラムが親であるかをチェックすることができます。 This exampleはforkの使い方を説明しています.2番目の例では、execl()コールを子プロセスセクションに置きます。

+0

この例をありがとう。 – hari

+0

私は多くのpplが私が求めている行動を必要とすると思う。 fork()とexecl()の両方を呼び出す作業を行う単一のAPIはないでしょうか?ちょっとした考え。 – hari

1

親プログラムがtailからの出力をキャプチャしたい場合は、popen()関数を調べる必要があります。これはtailプロセスを開始し、それが返すFILE *から出力を読み取ることができます。

親プログラムが出力のキャプチャに関心がない場合は、fork()を使用して子プロセスを作成し、execl()を呼び出します。子プロセスイメージは末尾に置き換えられ、親プロセスは続行されます。

関連する問題