服務器端口被占用會有什么現象?
使用命令netstat -ano | findstr 端口查看端口占用進程,會得到端口占用進程的PID號,但通過PID號在任務管理器中查不到該進程,且使用命令taskkill /f /pid PID號時報錯沒有找到進程;
2、使用Process Explorer工具搜索PID號會發現進程中存在一cmd.exe子進程;
3、若此時在任務管理器中或cmd命令中殺死該cmd.exe進程,會發現原占用端口被釋放。
問題原因:
程序停止時調用了system()函數,而此函數會啟動cmd.exe程序執行系統命令,在某些異常情況(也可能系統本身問題)下,會出現原程序已被停止釋放,但cmd子進程遲遲未被回收,導致原程序占用端口未被釋放