2

popenを使用してコマンドを実行(フォークオフ)しようとしていますが、表示されているのは、余分なsh -c "my_command process"ものもあります。

プロセスの数を最小限に抑えたいので、それを取り除くことは可能ですか?

ps出力:

root@home% ps awux | grep my_command
root 638  0.0  0.1  040  1424  ??  I    10:12PM   0:00.00 sh -c my_command /home/war
root 639  0.0  0.0  608   932  ??  S    10:12PM   0:00.01 my_command /home/war

マンページを読んだ後、私はこれがpopen()がどのように機能するかを知っています。

上記の問題への回答は@Rによって提供されました。

私の要件はそれ自体です。コマンドの出力をファイルにダンプし、そのファイルを1行ずつ読み取り、出力を処理する必要があります。これが私がpopenを使用している理由です。なぜなら、それはファイルで出力を返すからです。exec呼び出しを介してそれを達成できますか?

4

3 に答える 3

3

使用しないようにアドバイスしている善良な人々に耳を傾ける必要がありますpopen-それは悪いことです。execただし、発生した問題には簡単な修正があります。渡すコマンドラインの先頭に追加しますpopen。つまり、次の代わりに:

popen("my_command /home/war", ...

使用する:

popen("exec my_command /home/war", ...
于 2011-07-19T06:05:30.983 に答える
2

popenPOSIXシステムshの場合と同様に、子プロセスを生成するために使用します。system

それを避けたい場合は、、、、およびを使用してください( これforkは 多かれ少なかれ内部で行われることです)。あなたがパイプを必要としないならば、あなたはただそしてすることができます。closemkpipeexecpopenforkexec

于 2011-07-19T05:32:40.127 に答える
1

popenに関する限り、シェルを呼び出すことになっています(マンページを読んでください)

シェルプロセスをスキップするには、fork/execを実行できます

于 2011-07-19T05:32:59.270 に答える