C# を使用してリスニング ポート 29999 を書き込みました。プロセスが終了した後、再度開始すると、ポートが占有されていることがわかりました。ただし、netstat -ano | findstr 29999 を実行してプロセス ID を検索した後、そのようなプロセスはありませんでした。
クエリ後、監視している 29999 プロセスは消えていますが、その親プロセスを見つけて親プロセスを閉じる必要があります。次の例を参照してください。
-
まず、ポート番号を使用して、問題の原因となっているプロセスを見つける必要があります。
netstat -abno | findstr /i "listening"| find ":3000" TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 3116
-
次に、@Michael のコードを使用して親プロセス ID (ppid) を見つける必要があります。
wmic process get processid,parentprocessid | findstr/i 3116 3116 23828
-
次に、次のコードを使用して子プロセス ID を見つける必要があります。
wmic process where (ParentProcessId=23828) get Caption,ProcessId,CommandLine Caption ProcessId wireguard.exe 27400
-
子プロセスから親プロセスまでのすべてのプロセスを強制終了します。
taskkill /f /pid 27400 taskkill /f /pid 3116 taskkill /f /pid 23828
これが私の手順です
最後に実行された
taskkill /f /pid 49412
つまり、C# がリスニング サービスを開始すると、タスクは最終的に conhost.exe プロセスにホストされるため、C# のメイン プログラムは閉じられ、conhost.exe は終了せず、ポートは常に占有されます。以前は常にシステムを再起動していましたが、今はその必要がありません:)