java - 如何通过端口获取tomcat进程ID并结束该进程
问题描述
根据下面的代码,我正在尝试通过端口获取 tomcat 进程 ID 并结束该进程。我在 CMD 中得到这个命令是有效的,但习惯于 java 不起作用。我想纠正方法请帮助我
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("netstat -aon | find /i \"listening\"");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<OUTPUT>");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("</OUTPUT>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
}
解决方案
如果你使用的是windows,它会是这样的。我没有针对 linux 进行测试,但我认为如果您检查注释代码,它应该可以工作。
public static void main(String[] args) throws IOException, InterruptedException {
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("cmd /c netstat -ano | findstr 8080");
//for linux
//Process proc = rt.exec("/bin/bash -c netstat -ano |grep 8080");
BufferedReader bufferedReader = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
String line = null;
System.out.println("<OUTPUT>");
if ((line = bufferedReader.readLine()) != null) {
int processIdString = line.lastIndexOf(" ");
String processId = line.substring(processIdString, line.length());
System.out.println("Your process Id to Kill : " + processId);
rt.exec("cmd /c Taskkill /PID" + processId + " /T /F");
//for linux
//rt.exec("/bin/bash -c kill -9 "+processId);
}
System.out.println("<OUTPUT>");
} catch (Exception e) {
System.out.println("Error Occured");
}
}
推荐阅读
- java - 给定案例的正则表达式是什么?
- c - 如何在嵌入式 C while 循环中继续接收定时中断?
- python - 使用 Django 安装 Google Analytics 跟踪代码
- list - Dart 的 List 的“some”方法叫什么?检查至少一个元素是否通过测试的方法
- pyspark - Dataproc 上的 Pyspark 作业卡在第 0 阶段
- android - 如何在 Android 的外部浏览器中读取 PDF 文件
- reactjs - 更新按钮值
- javascript - 使用前一个数组的内容更新对象数组中的下一个数组
- docker - docker 容器中的防病毒软件 - fanotify 在主机和容器之间工作吗?
- python - Python 关闭失败的节目。Pytest 如何静默失败。抑制断言的回溯