boost::process::child
を待つ間に、「正常かどうか」を終了したかどうかをどのように知ることができますか?boost :: processプロセスが "正常に終了したか"終了したかを知る方法?
のは、私がprocessusを作成しましょう:
myprg.exeがあるboost::process::child child("myprg.exe", "5000");
child.wait();
int res = child.exit_code();
:
int main(int argc, char* argv[])
{
if (argc == 2)
{
boost::this_thread::sleep(boost::posix_time::milliseconds(atoi(argv[1])));
return 1;
}
return 0;
}
注:成功した場合、この意味をなさないMCVEは、私がメインの同意は0を返す必要があります。
は、私がどのように知ることができ、それは(インスタンスまたはWindows Process Managerのchild.terminate
を使用して)待っている間、誰かがプロセスを殺す場合child.exit_code()
が1のとき、child.exit_code()
は、最終的には、だから、1
を返すことを見ますこれがプロセスのメインエントリ関数によって返された値である場合、またはプロセスが終了した場合は?
1はプロセスが強制終了されたことを意味しますか?それから、プログラムは1を返して、この終了コードを残して、それが殺されてきて、きれいに終了しなかった特定の状況を特定すべきですか?
もしそうでなければ、boost::process
APIは、プロセスが正常終了したのか、または殺されたのかを知るための何かを提供しますか?
を追加します。プラットフォームに依存しない方法がありますが、プロセスグループを使用してCHLDシグナルを処理することができます。つまり、Boost Process APIの抽象化を破ることです。 – sehe