精华内容
下载资源
问答
  • I need kill process in java code by process port.I can do it manually in cmd like:C:\>netstat -a -n -o | findstr :6543TCP 0.0.0.0:6543 0.0.0.0:0 LISTENING 1145TCP ...

    I need kill process in java code by process port.

    I can do it manually in cmd like:

    C:\>netstat -a -n -o | findstr :6543

    TCP 0.0.0.0:6543 0.0.0.0:0 LISTENING 1145

    TCP [::]:6543 [::]:0 LISTENING 1145

    C:\>taskkill /F /PID 1145

    In java I could execute cmd command like:

    ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "netstat -a -n -o | findstr :6543");

    But I don't know how get PID as output of netstat and transfer it to the "taskkill" command. Could anyone suggest me?

    解决方案

    You can execute the ProcessBuilder and get the response from its Input Stream.

    Sample Code :

    public static void main(String[] args) throws IOException, InterruptedException

    {

    ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/C", "netstat -n -o | findstr :6129");

    Process process = builder.start();

    process.waitFor();

    printProcessStream(process.getInputStream());

    }

    private static void printProcessStream(InputStream inputStream) throws IOException

    {

    int bytesRead = -1;

    byte[] bytes = new byte[1024];

    String output = "";

    while((bytesRead = inputStream.read(bytes)) > -1){

    output = output + new String(bytes, 0, bytesRead);

    }

    System.out.println(" The netstat command response is \r\n"+output);

    }

    The "-a" argument for netstat causes the Process Builder to wait indefinitely. You will need to remove that. Additionally if you required to get the Error Stream then the following can be added.

    printProcessStream(process.getErrorStream());

    Once you get the response stream, you can parse the data and identify the PID to kill. Subsequently you can use the similar logic but changing the command, instead of netstat you can use the command "kill -9 $PID" to finally kill the process.

    展开全文
  • 使用Java调用CMD命令实现。 项目地址:https://gitee.com/shizhangmourenle/kill-process.git 主程序killPort : import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ...

    使用Java调用CMD命令实现。
    项目地址:https://gitee.com/shizhangmourenle/kill-process.git

    主程序killPort :

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Scanner;
    
    /**
     * @author zjq
     * @version 1.0
     * @date 2021/1/31 16:52
     */
    public class killPort {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("输入要查询的端口号:");
            int port = sc.nextInt();// 要查询的端口号
    
            killPort killPort = new killPort();
            String pid = killPort.getPID(String.valueOf(port));//获取pid == 135
            System.out.println("端口号为:" + port + "的PID 为:" + pid);
            if (pid==null){
                System.out.println("该端口下没有进程!!!");
                System.exit(0);
            }else {
                String pressName = killPort.getPressName(pid);
                System.out.println("进程名为:" + pressName);
                System.out.println("你要关闭该进程吗???  (0/1)");
                int i = sc.nextInt();
                if (i == 1) {
                    System.out.println("准备关闭 " + "pressName" + " 进程!!!");
                    killPort.killProcess(pid);
                } else {
                    System.exit(0);//退出程序
                }
            }
        }
    
        /**
         * 结束进程
         */
        public void killProcess(String pid) {
            Runtime runtime = Runtime.getRuntime();
            try {
                //taskkill /pid 10580 -f
                Process tasklist = runtime.exec("taskkill /pid " + pid + " -f");
                System.out.println("进程关闭成功");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 拿到PID对应的进程名
         * @return
         */
        public String getPressName(String PID) {
            StringUtils stringUtils = new StringUtils();
            Runtime runtime = Runtime.getRuntime();
            String processName = null;
            int index = 0;
            try {
                Process tasklist = runtime.exec("tasklist");
                BufferedReader reader = new BufferedReader(new InputStreamReader(tasklist.getInputStream(), "GBK"));
                String line = null;
                StringBuffer buffer = new StringBuffer();
                while ((line = reader.readLine()) != null) {
                    if (index >= 3) {
    //                    System.out.println(line);
                        String findpid = stringUtils.findpid(line);
                        if (PID.equals(findpid)) {
                            processName = stringUtils.getProcessName(line);
                        }
                    }
                    index++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return processName;
        }
    
        /**
         * 返回端口号对应的PID
         *
         * @param Port
         * @return
         */
        public String getPID(String Port) {
            StringUtils stringUtils = new StringUtils();
            Runtime runtime = Runtime.getRuntime();
            String PID = null;
            try {
                Process findPort = runtime.exec("netstat -ano");
                BufferedReader reader = new BufferedReader(new InputStreamReader(findPort.getInputStream(), "GBK"));
                String line = null;
                StringBuffer buffer = new StringBuffer();
                while ((line = reader.readLine()) != null) {
    //                System.out.println(line);
                    String ipAndPort = stringUtils.findIPAndPort(line);
                    String port = stringUtils.findPort(ipAndPort);
                    if (port.equals(Port)) {
                        PID = stringUtils.findPID(line);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return PID;
        }
    }
    

    工具类方法:

    
    /**
     * @author zjq
     * @version 1.0
     * @date 2021/1/31 19:26
     */
    public class StringUtils {
        /**
         * 根据PID拿到进程名称
         */
        public String getProcessName(String line) {
            String ss = line;
            StringBuffer buffer = new StringBuffer();
            for (int i = 0; i < ss.length(); i++) {
                if (ss.charAt(i) != ' ') {
                    buffer.append(ss.charAt(i));
                } else {
                    break;
                }
            }
            return buffer.toString();
        }
    
        /**
         * 解析出PID
         */
        public String findpid(String line) {
            String ss = line;
            StringBuffer buffer = new StringBuffer();
            for (int i = 33; i >= 0; i--) {
                if (ss.charAt(i) != ' ') {
                    buffer.append(ss.charAt(i));
                } else {
                    break;
                }
            }
            return buffer.reverse().toString();
        }
    
        /**
         * 拿到IP
         */
        public String findIPAndPort(String IP) {
            String ss = IP;
            StringBuffer ip = new StringBuffer();
            for (int i = 9; i < ss.length(); i++) {
                if (ss.charAt(i) != ' ') {
                    ip.append(ss.charAt(i));
                } else {
                    break;
                }
            }
            return ip.toString();
        }
    
        /**
         * 拿到PID
         */
        public String findPID(String PID) {
            String ss = PID;
            StringBuffer pid = new StringBuffer();
            for (int i = 71; i < ss.length(); i++) {
                pid.append(ss.charAt(i));
            }
            return pid.toString();
        }
    
        /**
         * 拿到端口号
         */
        public String findPort(String ipAndPort) {
            String ip = ipAndPort;
            StringBuffer buffer = new StringBuffer();
            for (int i = ip.length() - 1; i >= 0; i--) {
                if (ip.charAt(i) != ':') {
                    buffer.append(ip.charAt(i));
                } else {
                    break;
                }
            }
            return buffer.reverse().toString();
        }
    }
    
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    使用工具把Jar包变成killPort.exe。就可以在windows上面运行了。

    展开全文
  • PID=port ID,在STP(生成树协议)中,若在端口收到的BPDU中BID和path cost相同时,则比较PID来选择阻塞端口。数字电视复用系统名词 PID(Packet Identifier) 在数字电视复用系统中它的作用好比一份文件的文件名,...
  • 在搭建web平台的时候,好多会遇到某个端口被占用的情况,如果想查看是哪个程序占用某一个端口,好结束掉,或者想看看其他开放的端口,则可以用下面的方法(命令用红色字体): 查看端口状态: 在开始——运行中输入...

    在搭建web平台的时候,好多会遇到某个端口被占用的情况,如果想查看是哪个程序占用某一个端口,好结束掉,或者想看看其他开放的端口,则可以用下面的方法(命令用红色字体):

    查看端口状态:
    在开始——运行中输入cmd,在命令行窗口输入 netstat -an ;看到后面为Listening的端口就是开放的端口,如果要查看跟多信息,可以输入 netstat --help;查看帮助。
    查看某一个端口被哪个程序占用:
    方法一:
    1.在开始–运行 里面输入cmd点回车,会出现运行窗口。
    2.在提示符后输入netstat -ano回车,找到tcp 80端口对应的pid,比如1484.
    3.ctrl+alt+del打开任务管理器,选进程,这里有很多正在运行的程序怎么找?别急点上面的 查看–选择列–在PID(进程标示符)前面打钩。好了,下面的进程前面都有了PID号码。这时上一步找到的PID就有用了,找到1484,比如PEER.EXE什么的,结束进程吧。这时再开服务器,看WEB可以启动了!
    方法二:
    1.在开始–运行 里面输入cmd点回车,会出现运行窗口
    2.在命令行窗口输入 netstat -aon|findstr “被占用的端口号”
    TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 2448
    看到了吗,端口被进程号为2448的进程占用,继续执行下面命令:
    C:>tasklist|findstr “2448”
    thread.exe 2016 Console 0 16,064 K
    很清楚吧,thread占用了你的端口,Kill it
    如果第二步查不到,那就开任务管理器,看哪个进程是2448,然后杀之即可。
    如果需要查看其他端口。把 80 改掉即可。
    在系统中找到任务管理器,找到被占用的端口结束进程

    展开全文
  • 转载请请在页首注明作者与出处一:问题由史今天遇到一个问题,就是在实现自动化灾备的时候,发现原有死掉的程序没有完全关闭,当然这都不是本文的重点,重点是这个时候,我得把它完全关闭,...2.2:根据端口查找进...

    转载请请在页首注明作者与出处

    一:问题由史

    今天遇到一个问题,就是在实现自动化灾备的时候,发现原有死掉的程序没有完全关闭,当然这都不是本文的重点,重点是这个时候,我得把它完全关闭,所以才有了这篇文章。

    二:基础知识

    2.1:java要怎么实现

    java可以获取并删除JAVA虚拟机启动的应用,但是却并没有提供API获取操作系统中其它的进程的API。

    但是java可以执行操作系统的脚本命令。

    2.2:根据端口查找进程

    windows中有这样的命令

    netstat -ano 查看操作系统所有占用端口的进程

    netstat -ano | findstr "8080" 获取占用了80端口的进程

    得到的结果如下

    TCP 127.0.0.1:51846 127.0.0.1:5037 TIME_WAIT 0

    TCP 127.0.0.1:51847 127.0.0.1:5037 TIME_WAIT 0

    UDP 0.0.0.0:4500 *:* 444

    UDP 0.0.0.0:5355 *:* 1232

    可以看到TCP/UPD是所使用的协议,后面的是绑定IP与端口,最后一列,是占用的进程号(pid)。

    2.3:根据进程号删除进程

    再来看一条命令

    taskkill /pid 123

    我们可以关闭进程号为123的进程,当然,我试上面的这条命令的时候,系统提示无法终止这个进程,那我们可以加一个/F,如下,就能强行关闭。

    taskkill /F /pid 123

    三:java实现,支持一次性杀死多个端口

    之前有说过,java可以执行操作系统的脚本,不论是什么操作,系统,那么我们就可以用这个方法,来直接执行这些命令来达到相应的效果。

    package kill.window;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.util.ArrayList;

    import java.util.HashSet;

    import java.util.List;

    import java.util.Scanner;

    import java.util.Set;

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    public class KillServer {

    private Set ports;

    public static void main(String[] args) throws InterruptedException {

    System.out.println("请输入要杀掉的windows进程的端口号,如果有多个,则以逗号相隔");

    System.out.println("Please input kill port");

    Scanner scanner = new Scanner(System.in);

    String input = scanner.next();

    scanner.close();

    String[] split = input.split(",");

    Set ports = new HashSet<>();

    for (String spid : split) {

    try{

    int pid = Integer.parseInt(spid);

    ports.add(pid);

    }catch(Exception e){

    System.out.println("错误的端口号,请输入一个或者多个端口,以英文逗号隔开");

    try {

    Thread.sleep(5000);

    } catch (InterruptedException e1) {

    e1.printStackTrace();

    }

    System.exit(0);

    }

    }

    KillServer kill = new KillServer();

    kill.ports = ports;

    System.out.println("need kill " + ports.size() + " num");

    for (Integer pid : ports) {

    kill.start(pid);

    }

    System.out.println("清理完毕,程序即将退出");

    System.out.println("SUCCESS");

    Thread.sleep(5000);

    System.exit(0);

    }

    public void start(int port){

    Runtime runtime = Runtime.getRuntime();

    try {

    //查找进程号

    Process p = runtime.exec("cmd /c netstat -ano | findstr \""+port+"\"");

    InputStream inputStream = p.getInputStream();

    List read = read(inputStream, "UTF-8");

    if(read.size() == 0){

    System.out.println("找不到该端口的进程");

    try {

    Thread.sleep(6000);

    System.exit(0);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    }else{

    for (String string : read) {

    System.out.println(string);

    }

    System.out.println("找到"+read.size()+"个进程,正在准备清理");

    kill(read);

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    /**

    * 验证此行是否为指定的端口,因为 findstr命令会是把包含的找出来,例如查找80端口,但是会把8099查找出来

    * @param str

    * @return

    */

    private boolean validPort(String str){

    Pattern pattern = Pattern.compile("^ *[a-zA-Z]+ +\\S+");

    Matcher matcher = pattern.matcher(str);

    matcher.find();

    String find = matcher.group();

    int spstart = find.lastIndexOf(":");

    find = find.substring(spstart + 1);

    int port = 0;

    try {

    port = Integer.parseInt(find);

    } catch (NumberFormatException e) {

    System.out.println("查找到错误的端口:" + find);

    return false;

    }

    if(this.ports.contains(port)){

    return true;

    }else{

    return false;

    }

    }

    /**

    * 更换为一个Set,去掉重复的pid值

    * @param data

    */

    public void kill(List data){

    Set pids = new HashSet<>();

    for (String line : data) {

    int offset = line.lastIndexOf(" ");

    String spid = line.substring(offset);

    spid = spid.replaceAll(" ", "");

    int pid = 0;

    try {

    pid = Integer.parseInt(spid);

    } catch (NumberFormatException e) {

    System.out.println("获取的进程号错误:" + spid);

    }

    pids.add(pid);

    }

    killWithPid(pids);

    }

    /**

    * 一次性杀除所有的端口

    * @param pids

    */

    public void killWithPid(Set pids){

    for (Integer pid : pids) {

    try {

    Process process = Runtime.getRuntime().exec("taskkill /F /pid "+pid+"");

    InputStream inputStream = process.getInputStream();

    String txt = readTxt(inputStream, "GBK");

    System.out.println(txt);

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    private List read(InputStream in,String charset) throws IOException{

    List data = new ArrayList<>();

    BufferedReader reader = new BufferedReader(new InputStreamReader(in, charset));

    String line;

    while((line = reader.readLine()) != null){

    boolean validPort = validPort(line);

    if(validPort){

    data.add(line);

    }

    }

    reader.close();

    return data;

    }

    public String readTxt(InputStream in,String charset) throws IOException{

    BufferedReader reader = new BufferedReader(new InputStreamReader(in, charset));

    StringBuffer sb = new StringBuffer();

    String line;

    while((line = reader.readLine()) != null){

    sb.append(line);

    }

    reader.close();

    return sb.toString();

    }

    }

    https://www.cnblogs.com/zhuxiaojie/category/669086.html

    展开全文
  • Windows根据TCP端口查找进程PID再kill进程

    千次阅读 多人点赞 2019-05-14 23:56:11
    Windows根据TCP端口查找进程PID再kill进程 Windows环境下,有时候TCP端口莫名其妙的被占用,导致正常的网络端口绑定失败,比如Android开发中,adb无法识别,有时候原因就是端口被占用。Java开发中,端口在占用...
  • linux 查看java进程pid

    2021-05-13 20:32:18
    linux 查看java进程pid[2021-01-30 21:05:24]简介:建站服务器这篇文章主要介绍了linux中如何查看系统进程,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下linux查看端口被哪个进程...
  • 命令wmic process相关列出进程java.exe的详细信息:wmic process where name="java.exe" get /format:value列出进程java.exe的进程路径:wmic process where name="java.exe" get executablepath列出进程java.exe的...
  • 查看进程的端口

    2021-03-12 23:08:03
    貌似没有一种可以在所有的Unix系统中通用的方法,下属的某些方法仅仅适用于某个平台,或者需要加装某些程序...查找指定目标进程(java的atf web工程)tasklist -v |find "java"图像名 PIDjavaw.exe 27602.在全部端口中...
  • Windows环境下,查看java的进程ID和端口号,并杀死进程 1、查看全部任务列表 tasklist 仅查看java任务列表 tasklist | findstr "java" 2、查看进程号与端口号(PID)的关联 netstat -ano 仅查看指定端口号的连接...
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变...cmd查询端口号,pid,服务 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢
  • 前言 当某个端口被占用服务而无法知道时,可进行相应的方法处理 解决 方法一 使用netstat ...]# netstat -anpltu | grep 20103 ...7406/java:7406为应用程序的pidjava为应用服务的类型 方法二 使用lsof ]
  • 1、利用lsof -i:端口号lsof -i:端口号[root@01 ~]# lsof -i:8097COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEjava 24033 root 323u IPv6 124173190 0t0 TCP *:sac (LISTEN)2、利用netstat查看端口号的进程,...
  • java.exe占用Tomcat指定端口的问题(2013-05-18 19:25:09)标签:端口占用指定杂谈由于需要在服务器上部署一个javaWeb项目.所以就涉及到项目环境的配置。把编译后的项目放到Tomcat的webapps下面。然后把Tomcat放到...
  • 前言 在开发项目中经常启动项目后突然开发工具崩溃了,然后重新打开开发工具后启动项目,发现!...继续输入tasklist|findstr “11964”,回车,查看是哪个进程或者程序占用了8080端口,结果是:java.exe
  • 任务管理器中的PID(Process Identification)是指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PIDPID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统随机...
  • cmd查找端口命令Sometimes when developing multiple applications at once, or trying out demos, I end up with multiple programs running on different ports on my computer: 3000, 3001, 1313, and so on. ...
  • 通过PID查看端口号:netstat -anop|grep pid ——其中的status ESTABLISHED:已经建立连接,正在进行数据交换,接收对方发来的数据 LISTEN:侦听来自远方的TCP连接请求,表示端口正在开放,可以提供服务 SYN_...
  • #根据端口号查询对应的pid pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'); #杀掉对应的进程,如果pid不存在,则不执行 if [ -n "$pid" ]; then kill -9 $pid; fi ...
  • Java代码强制kill端口

    千次阅读 2018-05-30 13:42:03
    package ... import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util....
  • java杀死端口号的代码

    千次阅读 2017-03-06 17:58:59
    package com.lyd.service; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Has
  • 很多时候idea非正常关闭,导致项目的端口号被未关闭的端口号占用,所以需要使用 cmd 找到对应的端口号并...netstat -ano | findstr 你的端口号 # 查找被占用的端口号 taskkill -PID 进程号 -F # 强制关闭进程号 ...
  • 但往往很多时候只需要查看某个端口的使用情况,它到底被那个进程(对应PID)占用了,或者你还需要把它Kill掉。如果你在Windows操作系统,你可以使用netstat命令来查询PID,然后可以打开任务管理器,查看这个PID对应的...
  • Linux根据端口号查看进程PID

    千次阅读 2021-05-08 23:29:07
    1、命令lsof,以查找占用端口80为例,用法如下:[root@localhost nginx]# lsof -i:80以上为没有进程占用80端口,[root@localhost sbin]# lsof -i:80COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 8246 ...
  • 引言: 在windows下经常会碰到,某个端口被占用,无法启动特定应用的问题,需要找到占用特定端口的程序,并停掉它,然后才能正常继续工作,今天我们将介绍如何来查找端口的占用。
  • 问题场景 我启动了一个应用hexo,一个开源的博客...所以我要先查找正在该程序正在运行的进程的PID,接着杀死这个进程。 已知,程序启动名称为hexo,监听端口号为4000。 相关命令及用途 wyj@g40:~$ whatis ps ps (1) ...
  • JAVA开发端口号被占用?杀掉端口解决方法 查找被占端口号的进程id 1、window+R 输入cmd netstat -aon | findstr 端口号 根据进程id杀掉端口 taskkill /f /pid 进程id
  • 今天发现服务器上Tomcat8080端口起不来,老提示端口已经被占用。...发现下面的进程列表,其中最后一栏是PID/Programname发现8080端口PID为9658的Java进程占用。进一步使用命令:ps-aux|grepja...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,755
精华内容 8,302
关键字:

java查找pid的端口

java 订阅