簡體   English   中英

無法從C ++應用程序正確生成Raspberry Pi相機應用程序作為子進程

[英]Unable to correctly spawn Raspberry Pi camera application as child process from C++ app

我正在用C ++在Raspberry Pi / Raspbian上編寫應用程序。 我使用mkfifo()創建一個命名管道(FIFO),然后啟動raspiyuv從相機中獲取圖像。 對於內存, raspiyuv是Raspberry Pi命令行應用程序,它可以拍攝靜態圖像並將其另存為YUV文件。

我正在使用帶有-std = c ++ 17的 g ++ 6.3和Boost 1.64。 我可以從命令行使用的意義上說,我創建的FIFO是正確的。 它按預期工作。

錯誤是我生成的raspiyuv應用程序立即返回,退出代碼為0

我的代碼:

void myFunction()
{
    // Create the FIFO here with mkfifo(); // Works fine...
    boost::filesystem::path lExecPath = 
        boost::process::search_path( "raspiyuv" );  // returns correct path
    boost::process::child lProcess( lExecPath, "-w 2592 -h 1944 -o - -t 0 -y -s >> /var/tmp/myfifo" );
    int lPID = lProcess.id();   // Seems to be correct
    int lExitCode = lProcess.exit_code();  // Returns immediately with 0
}

當我直接將其輸入命令$ raspiyuv -w 2592 -h 1944 -o - -t 0 -y -s ,命令$ 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對象生成它時,它立即返回。

只要我的應用程序(父進程)還活着並且我不發送SIGKILL等任何想法來糾正此問題並允許boost::process::child仍然活着?

謝謝你的幫助!

boost::process::child與主進程異步運行。 如果想要同步行為,則必須調用lProcess.wait()或通過同步方式(例如使用boost::process::system lProcess.wait()啟動raspiyuv。

編輯:如果您希望其他過程是異步的(如您的編輯和注釋似乎表明),那么您真正嘗試做的事情對我來說還不清楚:

錯誤是我生成的raspiyuv應用程序立即返回, 退出代碼為0

什么臭蟲 通過boost::process::child文檔,正是預期的結果:

  1. int exit_code()const; 獲取exit_code。 如果未等待子項或終止子項,則返回值沒有任何意義。

您的代碼無處等待子項結束,因此會獲得已記錄的退出代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM