2

プロセス(プロセスA)が終了したときに、プロセス(プロセスA)によって割り当てられたすべてのリソースをクリーンアップするにはどうすればよいですか?プロセスAは、他のプロセスによって提供されるサービスを使用するときに、別のプロセススペースにリソースを割り当てる場合があります(AはIPCを使用して、別のプロセスによって提供されるサービスにアクセスします)。

これに利用できる標準のメカニズム/フレームワークはありますか?Linux環境で実行を処理します。

ありがとう、デン

4

1 に答える 1

2

一部のリソースは自動的にクリーンアップされます。スタックまたはヒープに割り当てられたメモリ、ソケットおよびファイル記述子、セマフォ操作 (SEM_UNDO を使用する場合)。

質問で漠然と言及しているシナリオ(IPCを使用して別のプロセスBからサービスにアクセスする)では、次のことが必要になります。

  1. プロセス B の状況を検出する
  2. 手できれいにします。

#1を解決する第一原理の方法は、プロセスBがプロセスAのPIDの存在をポーリングすることです。明らかに理想的ではありません。より良い解決策は、接続の消失の反対側 (TCP ソケットなど) を検出する IPC メソッドを使用することです。

ネットワーク上の 2 台のコンピューターと比較してプロセス A と B の間の類似点を描いた場合、これに対する典型的な解決策は、プロセス A からの API 呼び出しのたびにプロセス B がクリーンアップするか、接続リストを破棄して最終的にタイムアウトし、一定時間経過してもプロセス A から連絡がない場合は、プロセス A のリソースをクリーンアップします。

于 2011-11-15T18:07:48.427 に答える