zoukankan      html  css  js  c++  java
  • C#一键显示及杀死占用端口号进程

    参照园友freeliver54代码而做的,再根据需求做的,菜鸟一只有问题尽管提出来
    ----------------------------------------------------------------------

      1         private void t_btn_kill_Click(object sender, EventArgs e)
      2         {
      3             int port;
      4             bool b = int.TryParse(t_txt_guardport.Text, out port);
      5             if (!b)
      6             {
      7                 MessageBox.Show("请输入正确的监听端口");
      8                 return;
      9             }
     10             Process p = new Process();
     11             p.StartInfo.FileName = "cmd.exe";
     12             p.StartInfo.UseShellExecute = false;
     13             p.StartInfo.RedirectStandardError = true;
     14             p.StartInfo.RedirectStandardInput = true;
     15             p.StartInfo.RedirectStandardOutput = true;
     16             p.StartInfo.CreateNoWindow = true;
     17             List<int> list_pid = GetPidByPort(p, port);
     18             if (list_pid.Count == 0)
     19             {
     20                 MessageBox.Show("操作完成");
     21                 return;
     22             }
     23             List<string> list_process = GetProcessNameByPid(p, list_pid);
     24             StringBuilder sb = new StringBuilder();
     25             sb.AppendLine("占用" + port + "端口的进程有:");
     26             foreach (var item in list_process)
     27             {
     28                 sb.Append(item + "
    ");
     29             }
     30             sb.AppendLine("是否要结束这些进程?");
     31 
     32             if (MessageBox.Show(sb.ToString(), "系统提示", MessageBoxButtons.YesNo) == DialogResult.No)
     33                 return;
     34             PidKill(p, list_pid);
     35             MessageBox.Show("操作完成");
     36 
     37         }
     38 
     39         private static void PidKill(Process p, List<int> list_pid)
     40         {
     41             p.Start();
     42             foreach (var item in list_pid)
     43             {
     44                 p.StandardInput.WriteLine("taskkill /pid " + item + " /f");
     45                 p.StandardInput.WriteLine("exit");
     46             }
     47             p.Close();
     48         }
     49 
     50         private static List<int> GetPidByPort(Process p, int port)
     51         {
     52             int result;
     53             bool b = true;
     54             p.Start();
     55             p.StandardInput.WriteLine(string.Format("netstat -ano|find "{0}"", port));
     56             p.StandardInput.WriteLine("exit");
     57             StreamReader reader = p.StandardOutput;
     58             string strLine = reader.ReadLine();
     59             List<int> list_pid = new List<int>();
     60             while (!reader.EndOfStream)
     61             {
     62                 strLine = strLine.Trim();
     63                 if (strLine.Length > 0 && ((strLine.Contains("TCP") || strLine.Contains("UDP"))))
     64                 {
     65                     Regex r = new Regex(@"s+");
     66                     string[] strArr = r.Split(strLine);
     67                     if (strArr.Length >= 4)
     68                     {
     69                         b = int.TryParse(strArr[3], out result);
     70                         if (b && !list_pid.Contains(result))
     71                             list_pid.Add(result);
     72                     }
     73                 }
     74                 strLine = reader.ReadLine();
     75             }
     76             p.WaitForExit();
     77             reader.Close();
     78             p.Close();
     79             return list_pid;
     80         }
     81 
     82         private static List<string> GetProcessNameByPid(Process p, List<int> list_pid)
     83         {
     84             p.Start();
     85             List<string> list_process = new List<string>();
     86             foreach (var pid in list_pid)
     87             {
     88                 p.StandardInput.WriteLine(string.Format("tasklist |find "{0}"", pid));
     89                 p.StandardInput.WriteLine("exit");
     90                 StreamReader reader = p.StandardOutput;//截取输出流
     91                 string strLine = reader.ReadLine();//每次读取一行
     92 
     93                 while (!reader.EndOfStream)
     94                 {
     95                     strLine = strLine.Trim();
     96                     if (strLine.Length > 0 && ((strLine.Contains(".exe"))))
     97                     {
     98                         Regex r = new Regex(@"s+");
     99                         string[] strArr = r.Split(strLine);
    100                         if (strArr.Length > 0)
    101                         {
    102                             list_process.Add(strArr[0]);
    103                         }
    104                     }
    105                     strLine = reader.ReadLine();
    106                 }
    107                 p.WaitForExit();
    108                 reader.Close();
    109             }
    110             p.Close();
    111 
    112             return list_process;
    113         }
  • 相关阅读:
    [EasyUI美化换肤]更换EasyUi图标
    [干货来袭]MSSQL Server on Linux预览版安装教程(先帮大家踩坑)
    SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
    对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
    EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)
    采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
    android ViewFlipper(翻转视图) 使用
    Android 下拉列表Spinner 使用
    Android选项卡TabHost功能和用法
    【android,eclipse解决】eclipse insert "}" to complete ClassBodyR.java
  • 原文地址:https://www.cnblogs.com/dingguidong/p/5066184.html
Copyright © 2011-2022 走看看