From 6eb1396fb3d33fad5a3fa0cbc7741e1b1a06ef17 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Mon, 7 Jan 2013 18:42:53 +0100 Subject: [PATCH] Don't fail on killing, only log the error. --- .../process/KillableColoredProcessHandler.java | 16 ++++++++++------ .../execution/process/UnixProcessManager.java | 10 +++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java b/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java index 756723c4508b..39d971e77d90 100644 --- a/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java +++ b/platform/platform-impl/src/com/intellij/execution/process/KillableColoredProcessHandler.java @@ -40,6 +40,7 @@ public class KillableColoredProcessHandler extends ColoredProcessHandler impleme /** * This method shouldn't be overriden, see shouldKillProcessSoftly + * * @return */ private boolean canKillProcessSoftly() { @@ -52,17 +53,20 @@ public class KillableColoredProcessHandler extends ColoredProcessHandler impleme if (canKillProcessSoftly() && shouldKillProcessSoftly()) { // Unix: [soft-kill] at first send INT signal: final Process process = getProcess(); - UnixProcessManager.sendSigIntToProcessTree(process); - } - else { - // if soft kill isn't supported - use default implementation - super.doDestroyProcess(); - // else IDE will suggest 'terminate dialog' + if (UnixProcessManager.sendSigIntToProcessTree(process)) { + return; + } } + + // if soft kill isn't supported - use default implementation + super.doDestroyProcess(); + // else IDE will suggest 'terminate dialog' + } /** * This method should be overriden by children if the process shouldn't be killed softly (e.g. by kill -2) + * * @return */ protected boolean shouldKillProcessSoftly() { diff --git a/platform/util/src/com/intellij/execution/process/UnixProcessManager.java b/platform/util/src/com/intellij/execution/process/UnixProcessManager.java index 5c53064ace08..c16b8964cb4f 100644 --- a/platform/util/src/com/intellij/execution/process/UnixProcessManager.java +++ b/platform/util/src/com/intellij/execution/process/UnixProcessManager.java @@ -32,6 +32,8 @@ import java.util.*; * @author traff */ public class UnixProcessManager { + private static final Logger LOG = Logger.getInstance(UnixProcessManager.class); + public static final int SIGINT = 2; public static final int SIGKILL = 9; public static final int SIGTERM = 15; @@ -104,6 +106,7 @@ public class UnixProcessManager { * @param process tree root process */ public static boolean sendSignalToProcessTree(Process process, int signal) { + try { checkCLib(); final int our_pid = C_LIB.getpid(); @@ -138,6 +141,11 @@ public class UnixProcessManager { else { return true; //the parent process was already killed } + } catch (Exception e) { + //If we fail somehow just return false + LOG.warn("Error killing the process", e); + return false; + } } private static void findChildProcesses(final int our_pid, @@ -208,7 +216,7 @@ public class UnixProcessManager { errorStr.append(s).append("\n"); } if (errorStr.length() > 0) { - throw new IllegalStateException("error:" + errorStr.toString()); + throw new IOException("Error reading ps output:" + errorStr.toString()); } } finally {