C# で書かれたポート監視。プログラムの終了後、再度実行すると、ポートが占有されていてプロセスが存在しないことを示すメッセージが表示されます。

C# を使用してリスニング ポート 29999 を書き込みました。プロセスが終了した後、再度開始すると、ポートが占有されていることがわかりました。ただし、netstat -ano | findstr 29999 を実行してプロセス ID を検索した後、そのようなプロセスはありませんでした。

 クエリ後、監視している 29999 プロセスは消えていますが、その親プロセスを見つけて親プロセスを閉じる必要があります。次の例を参照してください。

  1. まず、ポート番号を使用して、問題の原因となっているプロセスを見つける必要があります。

    netstat -abno | findstr /i "listening"| find ":3000"
        TCP    0.0.0.0:3000           0.0.0.0:0              LISTENING       3116
    
  2. 次に、@Michael のコードを使用して親プロセス ID (ppid) を見つける必要があります。

    wmic process get processid,parentprocessid | findstr/i 3116
        3116             23828
    
  3. 次に、次のコードを使用して子プロセス ID を見つける必要があります。

    wmic process where (ParentProcessId=23828) get Caption,ProcessId,CommandLine
        Caption        ProcessId
        wireguard.exe  27400
    
  4. 子プロセスから親プロセスまでのすべてのプロセスを強制終了します。

    taskkill /f /pid 27400 
    taskkill /f /pid 3116 
    taskkill /f /pid 23828

これが私の手順です

 

 最後に実行された

 taskkill /f /pid 49412

つまり、C# がリスニング サービスを開始すると、タスクは最終的に conhost.exe プロセスにホストされるため、C# のメイン プログラムは閉じられ、conhost.exe は終了せず、ポートは常に占有されます。以前は常にシステムを再起動していましたが、今はその必要がありません:)

おすすめ

転載: blog.csdn.net/babytiger/article/details/132488048