[Bug-12994] [Worker] Fix kill process does not take effect (#12995)
This commit is contained in:
parent
43719f7c15
commit
d480c271ec
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.plugin.task.api;
|
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_FAILURE;
|
||||||
import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_KILL;
|
import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_KILL;
|
||||||
|
|
||||||
|
|
@ -233,10 +234,11 @@ public abstract class AbstractCommandExecutor {
|
||||||
ProcessUtils.kill(taskRequest);
|
ProcessUtils.kill(taskRequest);
|
||||||
result.setExitStatusCode(EXIT_CODE_FAILURE);
|
result.setExitStatusCode(EXIT_CODE_FAILURE);
|
||||||
}
|
}
|
||||||
|
int exitCode = process.exitValue();
|
||||||
logger.info(
|
String exitLogMessage = EXIT_CODE_KILL == exitCode ? "process has killed." : "process has exited.";
|
||||||
"process has exited, execute path:{}, processId:{} ,exitStatusCode:{} ,processWaitForStatus:{} ,processExitValue:{}",
|
logger.info(exitLogMessage
|
||||||
taskRequest.getExecutePath(), processId, result.getExitStatusCode(), status, process.exitValue());
|
+ " execute path:{}, processId:{} ,exitStatusCode:{} ,processWaitForStatus:{} ,processExitValue:{}",
|
||||||
|
taskRequest.getExecutePath(), processId, result.getExitStatusCode(), status, exitCode);
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -263,16 +265,11 @@ public abstract class AbstractCommandExecutor {
|
||||||
logger.info("cancel process: {}", processId);
|
logger.info("cancel process: {}", processId);
|
||||||
|
|
||||||
// kill , waiting for completion
|
// kill , waiting for completion
|
||||||
boolean killed = softKill(processId);
|
boolean alive = softKill(processId);
|
||||||
|
|
||||||
if (!killed) {
|
if (alive) {
|
||||||
// hard kill
|
// hard kill
|
||||||
hardKill(processId);
|
hardKill(processId);
|
||||||
|
|
||||||
// destory
|
|
||||||
process.destroy();
|
|
||||||
|
|
||||||
process = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -308,12 +305,12 @@ public abstract class AbstractCommandExecutor {
|
||||||
private void hardKill(int processId) {
|
private void hardKill(int processId) {
|
||||||
if (processId != 0 && process.isAlive()) {
|
if (processId != 0 && process.isAlive()) {
|
||||||
try {
|
try {
|
||||||
String cmd = String.format("kill -9 %d", processId);
|
String cmd = String.format("kill -9 %s", getPidsStr(processId));
|
||||||
cmd = OSUtils.getSudoCmd(taskRequest.getTenantCode(), cmd);
|
cmd = OSUtils.getSudoCmd(taskRequest.getTenantCode(), cmd);
|
||||||
logger.info("hard kill task:{}, process id:{}, cmd:{}", taskRequest.getTaskAppId(), processId, cmd);
|
logger.info("hard kill task:{}, process id:{}, cmd:{}", taskRequest.getTaskAppId(), processId, cmd);
|
||||||
|
|
||||||
Runtime.getRuntime().exec(cmd);
|
OSUtils.exeCmd(cmd);
|
||||||
} catch (IOException e) {
|
} catch (Exception e) {
|
||||||
logger.error("kill attempt failed ", e);
|
logger.error("kill attempt failed ", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue