プロセス(プロセスA)が終了したときに、プロセス(プロセスA)によって割り当てられたすべてのリソースをクリーンアップするにはどうすればよいですか?プロセスAは、他のプロセスによって提供されるサービスを使用するときに、別のプロセススペースにリソースを割り当てる場合があります(AはIPCを使用して、別のプロセスによって提供されるサービスにアクセスします)。
これに利用できる標準のメカニズム/フレームワークはありますか?Linux環境で実行を処理します。
ありがとう、デン
プロセス(プロセスA)が終了したときに、プロセス(プロセスA)によって割り当てられたすべてのリソースをクリーンアップするにはどうすればよいですか?プロセスAは、他のプロセスによって提供されるサービスを使用するときに、別のプロセススペースにリソースを割り当てる場合があります(AはIPCを使用して、別のプロセスによって提供されるサービスにアクセスします)。
これに利用できる標準のメカニズム/フレームワークはありますか?Linux環境で実行を処理します。
ありがとう、デン
一部のリソースは自動的にクリーンアップされます。スタックまたはヒープに割り当てられたメモリ、ソケットおよびファイル記述子、セマフォ操作 (SEM_UNDO を使用する場合)。
質問で漠然と言及しているシナリオ(IPCを使用して別のプロセスBからサービスにアクセスする)では、次のことが必要になります。
#1を解決する第一原理の方法は、プロセスBがプロセスAのPIDの存在をポーリングすることです。明らかに理想的ではありません。より良い解決策は、接続の消失の反対側 (TCP ソケットなど) を検出する IPC メソッドを使用することです。
ネットワーク上の 2 台のコンピューターと比較してプロセス A と B の間の類似点を描いた場合、これに対する典型的な解決策は、プロセス A からの API 呼び出しのたびにプロセス B がクリーンアップするか、接続リストを破棄して最終的にタイムアウトし、一定時間経過してもプロセス A から連絡がない場合は、プロセス A のリソースをクリーンアップします。