5

Pid が終了すると、関連付けられているすべてのファイル ハンドル/ポートが解放されます。プロセスが死にかけている場合、それが最後であっても gen_tcp:close や ssl:close のようなものを呼び出す必要がありますか?

4

1 に答える 1

8

「わざわざ」とは、「メモリ リークのリスクはありますか?」、「データが失われる可能性はありますか?」、または「クライアントが接続を認識して閉じる方法に影響しますか?」という意味ですか?

そうは言っても、クライアントのために close コマンドを発行することは礼儀正しいと考えられています。クライアントは、接続が閉じられるのではなく、突然切断されることがあります。たとえば、それが Web サーバーであり、クローズを送信しない場合、特定のブラウザーはそれをパイプ ブレーク (エラー) として読み取り、すぐに再接続を試みます。接続を適切に閉じることは礼儀正しく、コードを論理的に整理するのに役立ちます (すべてのリソースがどのように処理されるかを正確に知っています)。

erlang がガベージ コレクションをどのように処理するかは 100% わかりませんが、ほとんどのプログラミング言語 (したがって、erlang も想定している) では、プロセスを強制終了するとそれに関連するすべてのメモリが処理されると言えます。プロセスを終了させるだけでメモリリークが発生することはありません。

ただし、クライアントに送信するコンテンツがバッファに残っている可能性がある場合は、閉じる前にバッファまたは接続をフラッシュするように終了手順を作成する必要があります。そうしないと、データが失われる危険があります。

編集: legoscia が述べたように、開いているファイル記述子はすべてerlang で適切に処理する必要がありますが、プロセスを終了する前に自分でそれらを閉じることは決して害はありません (私はそれを「良い習慣」と呼んでいます)。

于 2012-08-13T00:06:42.133 に答える