• windows下端口占用处理工具


    一、通用方法

    经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,笔者在最近使用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     else
    33     {
    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

      另外,大家在关闭进程的时候要慎之又慎,免得关闭了一些不必要的进程,造成严重的后果。

  • 相关阅读:
    java 字符串 实例
    java 流程控制实例
    java:变量类型&修饰符
    java (todo)
    element ui form 类型验证,表单有值,还验证不通过
    集群ssh免密登陆配置
    supervisorctl 使用方法
    在VirtualBox上安装Debian
    debain kubeadm 安装k8s
    Cannot resolve javax.jms:jms:1.1 解决办法
  • 原文地址:https://www.cnblogs.com/liujw2114/p/7069145.html
Copyright © 2020-2023  润新知