標籤:getc opened else gif 程式 tle getchar 進程 tchar
一、通用方法
經常,我們在啟動應用的時候發現系統需要的連接埠被別的程式佔用,筆者在最近使用tomcat時,老是會遇到這種連接埠佔用的問題,如何知道誰佔有了我們需要的連接埠,很多人都比較頭疼,以下是通用方法:
在windows命令列視窗下執行:
1.查看所有的連接埠佔用情況
C:\>netstat -ano
協議 本地地址 外部地址 狀態 PID
TCP 127.0.0.1:1434 0.0.0.0:0 LISTENING 3236
TCP 127.0.0.1:5679 0.0.0.0:0 LISTENING 4168
TCP 127.0.0.1:7438 0.0.0.0:0 LISTENING 4168
TCP 127.0.0.1:8015 0.0.0.0:0 LISTENING 1456
TCP 192.168.3.230:139 0.0.0.0:0 LISTENING 4
TCP 192.168.3.230:1957 220.181.31.225:443 ESTABLISHED 3068
TCP 192.168.3.230:2020 183.62.96.189:1522 ESTABLISHED 1456
TCP 192.168.3.230:2927 117.79.91.18:80 ESTABLISHED 4732
TCP 192.168.3.230:2929 117.79.91.18:80 ESTABLISHED 4732
TCP 192.168.3.230:2930 117.79.91.18:80 ESTABLISHED 4732
TCP 192.168.3.230:2931 117.79.91.18:80 ESTABLISHED 4732
2.查看指定連接埠的佔用情況
C:\>netstat -aon|findstr "9050"
協議 本地地址 外部地址 狀態 PID
TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016
P: 看到了嗎,連接埠被進程號為2016的進程佔用,繼續執行下面命令: (也可以去工作管理員中查看pid對應的進程)
3.查看PID對應的進程
C:\>tasklist|findstr "2016"
映像名稱 PID 會話名 會話# 記憶體使用量
========================= ======== ================
tor.exe 2016 Console 0 16,064 K
P:很清楚吧,tor佔用了你的連接埠。
4.結束該進程
C:\>taskkill /f /t /im tor.exe
以上轉自:http://www.iteye.com/topic/1117270
二、描述與運行
儘管上述方法能夠解決這個問題,但是過於繁瑣,而且CMD下的那幾行命令實在難記住,筆者便寫了這個exe。這玩意的實現比較簡單,主要是調用了cstdlib庫中的system()函數,邏輯也十分的清楚。雖然比較簡單,但是感覺還是十分的實用,因此拿出來於大家分享。好吧,其實主要是給自己留個備份。
以下是筆者的運行:
三、原始碼
以下是實現的原始碼(轉載請註明出處),一個需要注意的點是:windows 為所有進程和線程分配的 ID 都是 4 的倍數。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 /* 5 #windows連接埠佔用處理工具 6 #大大維 7 #2017/6/23 8 */ 9 using namespace std;10 int main()11 {12 system("title windows連接埠佔用處理工具");//設定cmd視窗標題13 system("color 2B");14 char cmd1[64]="netstat -aon|findstr \"";15 char cmd2[64]="tasklist|findstr \"";16 char cmd3[64]="taskkill /f /t /im ";17 cout<<"請輸入被佔用的連接埠號碼:"<<endl;18 unsigned duankou=0;19 cin>>duankou;20 sprintf(cmd1,"%s%d\"",cmd1,duankou);21 system(cmd1);22 23 // windows 為所有進程和線程分配的 ID 都是 4 的倍數24 cout<<"請輸入連接埠佔用進程的PID(最後一列),或者直接結束(輸入非4的倍數,如1)";25 unsigned pid=1;26 cin>>pid;27 if(!(pid%4))28 {29 sprintf(cmd2,"%s%d\"",cmd2,pid);30 system(cmd2);31 }32 else33 {34 return 0;35 }36 cout<<"你想結束這個進程嗎?(y or n)"<<endl;37 char ch=‘n‘;38 cin>>ch;39 if(ch==‘y‘)40 {41 cout<<"請輸入進程名(第一列),或者直接結束(輸入0)"<<endl;42 char jingchengming[16];43 cin>>jingchengming;44 if(ch!=‘0‘)45 {46 sprintf(cmd3,"%s%s",cmd3,jingchengming);47 system(cmd3);48 cout<<"已經結束了該進程"<<endl;49 }50 }51 getchar();52 return 0;53 }
View Code
另外,大家在關閉進程的時候要慎之又慎,免得關閉了一些不必要的進程,造成嚴重的後果。
windows下連接埠佔用處理工具