bugfix> c > 投稿

とりわけ、(受信したコマンドに応じて)自分自身を強制終了し、タイムアウト前に設定されたアボート前に再起動する必要があるプログラムを実現する必要があります。さらに、再起動がこの種の操作によるものであることをログに記録する必要があります。 Linuxでは、これはフォークを使用して別のpidを管理することで非常に簡単に行うことができますが、残念ながら、プレーンCを使用してWindowsでこのプログラムを実現する必要があります。 。私はcreateProcessを理解しようとしましたが、この場合はそれほど示されていないようです。解決策は、2番目のプログラムを実現し、createProcessおよびコマンドライン引数を介してタイムアウトを渡すことですが、可能であれば回避したい魂です。

回答 1 件
  • fork() が必要な場合  セマンティクス、あなたのオプションは次のとおりです。

    Linux上のWindowsサブシステム。すでにfork()があります

    Cygwin、これにはfork()もあります

    自分で書いて...これはじゃない 簡単...

    「チート」できる場合、オプションは作成して殺すことですスレッド プロセスの代わりに。一時データには、TLS(スレッドローカルストレージ)を使用できます。

    別のチートは、ダンプファイルを作成することです。たとえば、プロセスを終了する前にMiniDumpWriteDumpでファイルを保存し、後で新しいプロセスを開始するときにMiniDumpReadDumpStreamでファイルを読み取ります。これもそれほど簡単ではなく、アプリケーションを再構築して古いダンプファイルを使用すると失敗します。しかし、少なくともそれはよく知られているWindows APIです。

    上記のいずれも機能しない場合、残っている唯一のオプションは、fork()ではなくspawn()であるCreateProcess()を使用し、必要なfork()機能をサポートするコードを追加することです。

あなたの答え