web-dev-qa-db-ja.com

別のプロセスを起動するためのC ++の最良の方法は?

これをしなければならなかったのは久しぶりで、過去には「スポーン」を使ってプロセスを作成していました。

ここで、アプリケーションからプロセスを非同期で起動したいので、アプリケーションはバックグラウンドで実行され続け、プロセスの起動によって停止されません。

また、起動したプロセスと通信できるようにしたいです。プロセスを起動するときに、起動されたプロセスがpidを使用してランチャーと通信できるように、ランチャープロセスIDを送信します。

どのプラットフォーム/オペレーティングシステムにも固有ではない、使用するのに最適な方法は何ですか?マルチプラットフォームのソリューションを探していますか?

私はこれをC++で書いていますが、サードパーティのライセンス製品に縛られるようなソリューションは必要ありません。

スレッドを使用したくないので、解決策は新しいプロセスを作成することでなければなりません。

4
SPlatten

自分の小さな(単一ヘッダー)ライブラリをプラグインします:

PStreams を使用すると、C++アプリケーションから別のプログラムを実行し、シェルパイプラインと同様に2つのプログラム間でデータを転送できます。

最も単純なケースでは、PStreamsクラスはPOSIX.2関数popen(3)およびpclose(3)のC++ラッパーのようなもので、Cのstdioライブラリの代わりにC++ iostreamを使用します。

ライブラリは、POSIXプラットフォーム上の任意のISO C++コンパイラで使用できる標準iostreamのスタイルのクラステンプレートを提供します。クラスは、fork(2)およびexec(2)ファミリーの関数を使用するstreambufクラスを使用して新しいプロセスを作成し、プロセスとの間でデータを読み書きするために最大3つのパイプを作成します。

0
Jonathan Wakely