C#实现查找指定端口被哪个进程占用并处理进程及dos命令下操作
1. 檢查當前系統中8000端口是否正在被其它進程使用;
2. 如果8000端口正在被使用,就找出該進程,并強行結束。
3. 使用C#變成語言實現。
檢查8000端口在被哪一個進程所使用:
簡單的解決方案如下:
1. 在程序中啟動一個新的進程,該進程的執行文件為:CMD.EXE
2. 給該進程傳遞一個命令行參數:netstat -ano
3. 獲取該命令所返回的結果,并對其進行分析,找出端口為8000的進程ID(PID)
4. 根據PID找出該進程,可以對該進程進行任意的處理
代碼:
static void Main(string[] args) {
 ??? Process pro = new Process();
 // 設置命令行、參數
 ??? pro.StartInfo.FileName = "cmd.exe";
 ??? pro.StartInfo.UseShellExecute = false;
 ??? pro.StartInfo.RedirectStandardInput = true;
 pro.StartInfo.RedirectStandardOutput = true;
 ??? pro.StartInfo.RedirectStandardError = true;
 ??? pro.StartInfo.CreateNoWindow = true;
 // 啟動CMD
 ??? pro.Start();
 // 運行端口檢查命令
 ??? pro.StandardInput.WriteLine("netstat -ano");
 ??? pro.StandardInput.WriteLine("exit");
 // 獲取結果
 ??? Regex reg = new Regex("\\s+", RegexOptions.Compiled);
 string line = null;
 while ((line = pro.StandardOutput.ReadLine()) != null) {
 ??????? line = line.Trim();
 if (line.StartsWith("TCP", StringComparison.OrdinalIgnoreCase)) {
 ??????????? line = reg.Replace(line, ",");
 string[] arr = line.Split(',');
 if (arr[1].EndsWith(":8000")||arr[1].Contains(":8000")) {
 ??????????????? Console.WriteLine("8000端口的進程ID:{0}", arr[4]);
 int pid = Int32.Parse(arr[4]);
 ??????????????? Process pro8000 = Process.GetProcessById(pid);
 // 處理該進程
 break;
 ??????????? }
 ??????? }
 ??? }
 ??? pro.Close();
 }
/*********************************
釋放對某端口的占用
釋放對某端口的占用
假如我們需要確定誰占用了我們的9050端口?
1、Windows平臺?
在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
也可以看到pid后,啟動任務管理器,選中“進程”標簽,點擊“查看”—“選擇列”,選中PID(進程標識符),這樣就可以看到每個進程的標識符,然后Cut掉相應的進程即可。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的C#实现查找指定端口被哪个进程占用并处理进程及dos命令下操作的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 解决:Unable to open de
- 下一篇: 哈哈哈,只有程序员才懂的黑色幽默 ...
