我使用Java 8。 当我运行tomcat 8时(对于嵌入式Kafka和Zookeeper),我运行了4个Java进程。 如果tomcat崩溃,进程将不会与他关闭。 下次开始时,我需要找到进程并杀死后再运行。 如何找到4个PID激活的过程?
例如,这是linux中的列表
这是在Windows中
重要的是我只能找到这4个进程,而不关闭其他潜在的Java进程。
谢谢
编辑:
我这样解决了:
InputStream stdin = null;
if (isWindows)
stdin = Runtime.getRuntime().exec("wmic process where \"CommandLine like '%kafka%'\" get ProcessID").getInputStream();
else
{
stdin = Runtime.getRuntime().exec("ps -o pid,cmd -C java | awk '/kafka/ {print $1}'").getInputStream();
}
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String s;
while ((s = br.readLine()) != null) {
sb.append(s).append("\n");
}
String result = sb.toString().replaceAll("\\s{2,}", " ").trim();
String[] pids = result.split(" ");
for (String p: pids)
{
if (isANumber(p))
{
//killa processo
SYS_MON.killProcess(Integer.parseInt(p));
System.out.print("kill process with PID: "+p);
}
}
我将此库添加到了pom.xml
<dependency>
<groupId>com.danielflower.apprunner</groupId>
<artifactId>javasysmon</artifactId>
<version>0.3.5.0</version>
</dependency>