問題タブ [boost-process]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1640 参照

c++ - boost::process 0.6 へのリンク時の「複数定義」エラー

このリンクエラーで少し迷っています。問題はライブラリ自体ではなく自分の側にあると思いますが、これを解決する方法がわかりません。

boost::process 0.6 https://github.com/klemens-morgenstern/boost-process/にリンクしようとしています

main.cpp

レコーダー.cpp

レコーダー.h

0 投票する
2 に答える
148 参照

c++ - サブプロセスの起動時の競合状態により、パイプからの読み取りがハングする

それぞれ子プロセスを起動する 2 つのスレッドがあります。最初のアプリケーションは、非常に長時間実行されるバイナリーです。2番目は非常に迅速に終了します。

これが失敗することがある競合状態があります。以下に、実行可能な最小限のコード例を示します。

標準の fork / execve / dup2 システムを使用する Boost Process 0.5 を使用します。ブースト プロセスがどのように機能するかについてはいくつかのハックがありますが、一般的には非常にうまく機能します。

親プロセスはさらに多くのプロセスを起動し、一般的には機能します。

特にインターリーブできない部分がわからないため、プロセスを一度に 1 つずつ簡単に起動することはできません。

なぜこれがハングするのかについてのアイデアはありますか?

期待される出力:

ただし、常にではありませんが、多くの場合、std_err_pipe で停止します。

(process-test.cpp として保存し、でコンパイルしますg++ process-test.cpp -o process-test -lboost_iostreams -lboost_filesystem -lboost_thread -lboost_system)

0 投票する
1 に答える
214 参照

c++11 - Boost::Boost::Process::posix::use_vfork との組み合わせでのプロセス リンカ エラー

私はBoost::Process(1.64.0) をいじり、GCC 7.1.1 を使用してvfork()、プロセスをフォークするときに の使用を強制しようとしています。次のプログラムのリンカー エラーが表示されます。

使用:

生成されるリンカ エラーは次のとおりです。

関数 'boost::process::detail::posix::executor >、boost::fusion::filter_view&、boost::process::detail::posix::use_vfork_ const&> const、boost::process::detail 内::is_initializer > > > >::operator()()': spawn_simple.cpp:(.text._ZN5boost7process6detail5posix8executorINS_6fusion10joint_viewINS4_5tupleIJNS2_12exe_cmd_initIcEEEEENS4_11filter_viewIKNS6_IJRA6_KcRNS2_8null_outILi1ELin1EEERKNS2_10use_vfork_EEEENS1_14is_initializerIN4mpl_3argILin1EEEEEEEEEEclEv[_ZN5boost7process6detail5posix8executorINS_6fusion10joint_viewINS4_5tupleIJNS2_12exe_cmd_initIcEEEEENS4_11filter_viewIKNS6_IJRA6_KcRNS2_8null_outILi1ELin1EEERKNS2_10use_vfork_EEEENS1_14is_initializerIN4mpl_3argILin1EEEEEEEEEEclEv]+0x31): undefined reference to `boost::process::detail::posix::executor > 、boost::fusion::filter_view&、boost::process::detail::posix::use_vfork_ const&> const, boost::process::detail::is_initializer > > > >::invoke(mpl_::bool_, mpl_::bool_)'

私の知る限り、Boost Process 自体はヘッダーのみなので、未定義の参照について不平を言っているのはなぜboost::process<...>::invoke()ですか?

と を追加-lboost_systemしてみまし-lboost_iostreamsたが、リンカー エラーは解決しません。

0 投票する
1 に答える
153 参照

c++ - C++ アプリから子プロセスとして Raspberry Pi カメラ アプリケーションを正しく生成できない

C++ で Raspberry Pi/Raspbian でアプリケーションをコーディングしています。名前付きパイプ (FIFO) を作成し、raspiyuvmkfifo()を起動してカメラから画像を取得します。メモリの場合、raspiyuvは、静止画像を取得して YUV ファイルとして保存する Raspberry Pi コマンド ライン アプリケーションです。

-std=c++17で g++ 6.3 と Boost 1.64 を使用しています。私が作成した FIFO は、コマンド ラインから使用できるという意味では正しいです。期待どおりに動作します。

バグは、アプリケーションraspiyuv I spawn が終了コード 0 ですぐに戻ることです。

私のコード:

$ raspiyuv -w 2592 -h 1944 -o - -t 0 -y -sコマンドラインに直接入力すると、コマンドは正しいです。また、FIFO へのリダイレクトも正しく機能します。-w 2592 -h 1944取得した画像のサイズを指定し、-o -画像を stdout に出力することを-t 0意味し、永久に待機-yすることを意味し、Y チャネルのみを保存することを-s意味し、SIGUSR1 が画像キャプチャをトリガーするのを待機することを意味します。

コマンド ラインから呼び出すと、アプリケーションは SIGUSR1 を送信するまでアイドル状態になり、イメージをキャプチャして FIFO にストリーミングし、アイドル状態に戻ります。それはいいです。

オブジェクトを作成してスポーンすると、boost::process::childすぐに戻ります。

boost::process::childこれを修正し、アプリケーション (親プロセス) が生きていて、SIGKILL などを送信しない限り、生き続けることを許可するアイデアはありますか?

ご協力いただきありがとうございます!