/* * Copyright 2013 Pavel Stastny <pavel.stastny at gmail.com>. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.aplikator.server.processes.impl.processes.unix; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.aplikator.server.processes.CannotCallStopException; import org.aplikator.server.processes.RunnableSerializationAware; import org.aplikator.server.processes.Work; import org.aplikator.server.processes.impl.processes.AbstractOSProcess; /** * @author Pavel Stastny <pavel.stastny at gmail.com> */ public class UnixOSProcess extends AbstractOSProcess { public static final Logger LOGGER = Logger.getLogger(UnixOSProcess.class.getName()); public UnixOSProcess(String identifier, String appname, RunnableSerializationAware runnable, String[] libs, String[] classpath) { super(identifier, appname, runnable, libs, classpath); } public UnixOSProcess(String identifier, String appname, Work[] works, String[] libs, String[] classpath) { super(identifier, appname, works, libs, classpath); } @Override protected void stopMeOSDependent() throws CannotCallStopException { try { LOGGER.fine("Killing process " + getPid()); // kill -9 <pid> List<String> command = new ArrayList<String>(); command.add("kill"); command.add("-9"); command.add("" + getPid()); ProcessBuilder processBuilder = new ProcessBuilder(command); Process startedProcess = processBuilder.start(); LOGGER.fine("killing command '" + command + "' and exit command "/*+startedProcess.exitValue()*/); } catch (IOException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); throw new CannotCallStopException(e); } } }