This is an automated email from the ASF dual-hosted git repository.

kerwin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new d480c271ec [Bug-12994] [Worker] Fix kill process does not take effect 
(#12995)
d480c271ec is described below

commit d480c271ec7d86b3af1a6132b88bbb2cdcabc558
Author: Kerwin <[email protected]>
AuthorDate: Sun Nov 27 14:27:48 2022 +0800

    [Bug-12994] [Worker] Fix kill process does not take effect (#12995)
---
 .../plugin/task/api/AbstractCommandExecutor.java   | 25 ++++++++++------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/AbstractCommandExecutor.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/AbstractCommandExecutor.java
index bdcf25c3e7..8674723911 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/AbstractCommandExecutor.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/AbstractCommandExecutor.java
@@ -17,6 +17,7 @@
 
 package org.apache.dolphinscheduler.plugin.task.api;
 
+import static 
org.apache.dolphinscheduler.plugin.task.api.ProcessUtils.getPidsStr;
 import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_FAILURE;
 import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_KILL;
 
@@ -233,10 +234,11 @@ public abstract class AbstractCommandExecutor {
             ProcessUtils.kill(taskRequest);
             result.setExitStatusCode(EXIT_CODE_FAILURE);
         }
-
-        logger.info(
-                "process has exited, execute path:{}, processId:{} 
,exitStatusCode:{} ,processWaitForStatus:{} ,processExitValue:{}",
-                taskRequest.getExecutePath(), processId, 
result.getExitStatusCode(), status, process.exitValue());
+        int exitCode = process.exitValue();
+        String exitLogMessage = EXIT_CODE_KILL == exitCode ? "process has 
killed." : "process has exited.";
+        logger.info(exitLogMessage
+                + " execute path:{}, processId:{} ,exitStatusCode:{} 
,processWaitForStatus:{} ,processExitValue:{}",
+                taskRequest.getExecutePath(), processId, 
result.getExitStatusCode(), status, exitCode);
         return result;
 
     }
@@ -263,16 +265,11 @@ public abstract class AbstractCommandExecutor {
         logger.info("cancel process: {}", processId);
 
         // kill , waiting for completion
-        boolean killed = softKill(processId);
+        boolean alive = softKill(processId);
 
-        if (!killed) {
+        if (alive) {
             // hard kill
             hardKill(processId);
-
-            // destory
-            process.destroy();
-
-            process = null;
         }
     }
 
@@ -308,12 +305,12 @@ public abstract class AbstractCommandExecutor {
     private void hardKill(int processId) {
         if (processId != 0 && process.isAlive()) {
             try {
-                String cmd = String.format("kill -9 %d", processId);
+                String cmd = String.format("kill -9 %s", 
getPidsStr(processId));
                 cmd = OSUtils.getSudoCmd(taskRequest.getTenantCode(), cmd);
                 logger.info("hard kill task:{}, process id:{}, cmd:{}", 
taskRequest.getTaskAppId(), processId, cmd);
 
-                Runtime.getRuntime().exec(cmd);
-            } catch (IOException e) {
+                OSUtils.exeCmd(cmd);
+            } catch (Exception e) {
                 logger.error("kill attempt failed ", e);
             }
         }

Reply via email to