2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.maven.plugin.util;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
16 public class ProcessMonitor {
17 public static final String SEP = File.pathSeparator;
18 public static final boolean WIN =
19 System.getProperty("os.name").toLowerCase().indexOf("windows") > -1;
23 public void log(String msg) {
24 System.out.println("" + msg);
27 public List<JavaProcess> getProcesses() {
28 return Collections.emptyList();
31 public List<JavaProcess> getProcesses(String mainClass, String systemPropertyKey) {
32 List<JavaProcess> result = new ArrayList<JavaProcess>();
33 for (JavaProcess info : getProcesses()) {
34 if (info.getMainClass().equals(mainClass)) {
35 if (info.getSystemProperties().containsKey(systemPropertyKey)) {
43 public int kill(String mainClass) {
44 for (JavaProcess info : getProcesses()) {
45 if (info.getMainClass().equals(mainClass)) {
46 log("Killing process matching class: " + mainClass);
47 return kill(info.getPid());
53 public static int kill(int pid) {
54 String cmd = WIN ? "TASKKILL /F /PID " + pid : "kill -SIGTERM " + pid;
56 Process p = Runtime.getRuntime().exec(cmd);
59 } catch (Exception e) {
65 public static ProcessMonitor load() {
66 // load the providers dynamically to allow error handling
67 ProcessMonitor pm = load("org.opendaylight.controller.maven.plugin.util.VMProcessMonitor");
69 pm = load("org.opendaylight.controller.maven.plugin.util.JpsProcessMonitor");
71 return (pm == null ? new ProcessMonitor() : pm);
74 private static ProcessMonitor load(String clz) {
76 Class c = Class.forName(clz);
77 return (ProcessMonitor) c.newInstance();
78 } catch (Exception e) {
84 // simple driver for basic manual testing
85 public static void main(String[] args) throws Exception {
86 ProcessMonitor pm = ProcessMonitor.load();
87 System.out.println("==== " + pm);
88 for (JavaProcess info : pm.getProcesses()) {
89 System.out.println(info.toString());
92 System.out.println("==== controller processses ");
93 for (JavaProcess info : pm.getProcesses(
94 "org.eclipse.equinox.launcher.Main", "opendaylight.controller"))
96 System.out.println(info.toString());
97 pm.kill(info.getPid());