0

開始後、アドレスとポートにバインドするプロセスがあります。これらのプロセスはexec、子プロセスが閉じると画面が閉じるように、を使用して画面内で実行されます。

プロセスを強制終了するときはを使用kill -9 PIDしますが、画面が終了することがありますが、プロセスを再開すると、古いプロセスはまだポートを使用しているため、プロセスを再度終了する必要があります。

また、ソケットが開いたままになり、メモリが古くなり、ランダムなリソースが使用されていることも読んだSIGKILLので、単純なkill PID、つまりに目を向けましたSIGTERM

SIGTERMプロセスがアドレスとポートからバインド解除できることが保証されていますか、それともより良い代替手段がありますか?

4

1 に答える 1

1

リッスン ポートを開いたままにするすべてのプロセスを SIGKILL すると、確実に閉じることができます。

ただし、TCP 仕様で要求されているように、TIME_WAIT 状態にある間、数分間は閉じない場合があります (リスニングしているクライアントに、元の閉じているパケットを見逃した場合にポートが閉じていることを知らせるため)。

正常に動作するサーバーは、オプション SO_REUSEADDR を使用してソケットを開き、再起動時に同じポートをすぐに再利用できるようにしますが、これはアプリケーション固有です。これがないと、ポートは数分間使用されているように見えます。

于 2013-02-11T06:29:35.323 に答える