From 33c0a6bc10e382144741563d6feca25f18ffc72c Mon Sep 17 00:00:00 2001 From: lvchazaizai Date: Tue, 16 Jun 2020 14:25:24 +0800 Subject: [PATCH] feature:add exclude-process flag in killing process experiment --- exec/bin/killprocess/killprocess.go | 10 ++++++---- exec/process_kill.go | 8 ++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/exec/bin/killprocess/killprocess.go b/exec/bin/killprocess/killprocess.go index 70cae3b..60de854 100644 --- a/exec/bin/killprocess/killprocess.go +++ b/exec/bin/killprocess/killprocess.go @@ -28,7 +28,7 @@ import ( "github.com/chaosblade-io/chaosblade-exec-os/exec/bin" ) -var killProcessName, killProcessInCmd, killProcessLocalPorts, killProcessSignal string +var killProcessName, killProcessInCmd, killProcessLocalPorts, killProcessSignal, killProcessExcludeProcess string var killProcessCount int func main() { @@ -37,17 +37,19 @@ func main() { flag.IntVar(&killProcessCount, "count", 0, "limit count") flag.StringVar(&killProcessLocalPorts, "local-port", "", "local service ports") flag.StringVar(&killProcessSignal, "signal", "9", "kill process signal") + flag.StringVar(&killProcessExcludeProcess, "exclude-process", "", "kill process exclude specific process") bin.ParseFlagAndInitLog() - killProcess(killProcessName, killProcessInCmd, killProcessLocalPorts, killProcessSignal, killProcessCount) + killProcess(killProcessName, killProcessInCmd, killProcessLocalPorts, killProcessSignal, killProcessExcludeProcess, killProcessCount) } var cl = channel.NewLocalChannel() -func killProcess(process, processCmd, localPorts, signal string, count int) { +func killProcess(process, processCmd, localPorts, signal, excludeProcess string, count int) { var pids []string var err error - var ctx = context.WithValue(context.Background(), channel.ExcludeProcessKey, "blade") + var excludeProcessValue = fmt.Sprintf("blade,%s", excludeProcess) + var ctx = context.WithValue(context.Background(), channel.ExcludeProcessKey, excludeProcessValue) if process != "" { pids, err = cl.GetPidsByProcessName(process, ctx) if err != nil { diff --git a/exec/process_kill.go b/exec/process_kill.go index b423b23..08b26c9 100644 --- a/exec/process_kill.go +++ b/exec/process_kill.go @@ -54,6 +54,10 @@ func NewKillProcessActionCommandSpec() spec.ExpActionCommandSpec { Name: "signal", Desc: "Killing process signal, such as 9,15", }, + &spec.ExpFlag{ + Name: "exclude-process", + Desc: "Exclude process", + }, }, ActionFlags: []spec.ExpFlagSpec{}, ActionExecutor: &KillProcessExecutor{}, @@ -103,6 +107,7 @@ func (kpe *KillProcessExecutor) Exec(uid string, ctx context.Context, model *spe processCmd := model.ActionFlags["process-cmd"] localPorts := model.ActionFlags["local-port"] signal := model.ActionFlags["signal"] + excludeProcess := model.ActionFlags["exclude-process"] if process == "" && processCmd == "" && localPorts == "" { return spec.ReturnFail(spec.Code[spec.IllegalParameters], "less process matcher") } @@ -124,6 +129,9 @@ func (kpe *KillProcessExecutor) Exec(uid string, ctx context.Context, model *spe if signal != "" { flags = fmt.Sprintf(`%s --signal %s`, flags, signal) } + if excludeProcess != "" { + flags = fmt.Sprintf(`%s --exclude-process %s`, flags, excludeProcess) + } return kpe.channel.Run(ctx, path.Join(kpe.channel.GetScriptPath(), killProcessBin), flags) }