アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトルのとおりです。
popen後のPIDを管理したいのですが
PIDを知る方法がわかりません。

どうしたらよいか教えてください。

A 回答 (2件)

popenの仕様上、子プロセスのPIDを呼び出し元が知る方法は標準では用意されていません。



したがって、解決方法としては、ソースをコピーしてpopenのスーパーセットを用意するのが一番簡単です。

FreeBSDの/usr/src/libc/gen/popen.cの実装では、関数でstaticにポインタを確保していて、popenが呼び出されるたびにとpidとfpを保存するメモリの一次リンクが保持されています。

この場合、staticのポインタのリストの内容を取り出せる関数をひとつ実装するだけで、pidは取り出せます。
実装とはいっても、pcloseではwait4を実行するためにリストの内容をたぐるコードが入っているので、そこをコピペするだけです。

いかがでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変参考になりました。検討の結果
fork+execで実装することにしました。

popenを使う際はこの方法を
使おうと思います。

お礼日時:2005/10/08 13:16

popenを使う代わりにfork + execv を使ってみるというのはいかがでしょうか?

    • good
    • 0
この回答へのお礼

その方法も考えていて、一度はpopenで
実装するという話になっていたのですが、
結局fork+execを使うこととしました。

どうもありがとうございました。

お礼日時:2005/10/08 13:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A