From b2788b9ef1f5ee39cf87c1c69ac8b8b73b285b9f Mon Sep 17 00:00:00 2001 From: eleksir Date: Sun, 14 Apr 2024 03:19:17 +0300 Subject: [PATCH] Optimize work with signals --- main.go | 92 +++++---------------------------------------------------- util.go | 24 ++++++++++++++- 2 files changed, 31 insertions(+), 85 deletions(-) diff --git a/main.go b/main.go index cf9bd1e..8353bff 100644 --- a/main.go +++ b/main.go @@ -22,7 +22,7 @@ var pool *pond.WorkerPool // Канал, в который приходят уведомления для хэндлера сигналов от траппера сигналов. var sigChan = make(chan os.Signal, 1) -var kill = make(map[string]string) +var kill = make(map[string]syscall.Signal) var renice = make(map[string]int) // main основная функция программы. @@ -101,103 +101,27 @@ func reniced(cnf Config) { for _, p := range processList { ok := pool.TrySubmit(func() { if processName, err := p.Name(); err == nil { - if killSignal := kill[processName]; killSignal != "" { + if killSignal := kill[processName]; killSignal != 0 { switch killSignal { - case "kill": - _ = p.SendSignal(syscall.SIGKILL) + case syscall.SIGSTOP: + _ = p.SendSignal(killSignal) if cnf.Debug { log.Printf( "Matching processName with killProcessname (%s), SIG%s sent", processName, - strings.ToUpper(killSignal), + strings.ToUpper(killSignal.String()), ) } - case "stop": - if s, err := p.Status(); err == nil && s[0] != "stop" { - _ = p.SendSignal(syscall.SIGSTOP) - if cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s), SIG%s sent", - processName, - strings.ToUpper(killSignal), - ) - } - } else if err == nil && s[0] == "stop" && cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s) and it is already stopped", - processName, - ) - } - case "term": - _ = p.SendSignal(syscall.SIGTERM) + default: + _ = p.SendSignal(killSignal) if cnf.Debug { log.Printf( "Matching processName with killProcessname (%s), SIG%s sent", processName, - strings.ToUpper(killSignal), - ) - } - case "int": - _ = p.SendSignal(syscall.SIGINT) - - if cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s), SIG%s sent", - processName, - strings.ToUpper(killSignal), - ) - } - case "quit": - _ = p.SendSignal(syscall.SIGQUIT) - - if cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s), SIG%s sent", - processName, - strings.ToUpper(killSignal), - ) - } - case "abrt": - _ = p.SendSignal(syscall.SIGABRT) - - if cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s), SIG%s sent", - processName, - strings.ToUpper(killSignal), - ) - } - case "hup": - _ = p.SendSignal(syscall.SIGHUP) - - if cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s), SIG%s sent", - processName, - strings.ToUpper(killSignal), - ) - } - case "usr1": - _ = p.SendSignal(syscall.SIGUSR1) - - if cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s), SIG%s sent", - processName, - strings.ToUpper(killSignal), - ) - } - case "usr2": - _ = p.SendSignal(syscall.SIGUSR2) - - if cnf.Debug { - log.Printf( - "Matching processName with killProcessname (%s), SIG%s sent", - processName, - strings.ToUpper(killSignal), + strings.ToUpper(killSignal.String()), ) } } diff --git a/util.go b/util.go index 6ae8582..54ca5cf 100644 --- a/util.go +++ b/util.go @@ -5,6 +5,7 @@ import ( "log" "os" "strings" + "syscall" "gopkg.in/yaml.v3" ) @@ -96,7 +97,28 @@ func readConf(path string) (Config, error) { switch v.Sig { case "kill", "stop", "term", "int", "quit", "abrt", "hup", "usr1", "usr2": for _, procName := range v.Name { - kill[procName] = v.Sig + switch v.Sig { + case "kill": + kill[procName] = syscall.SIGKILL + case "stop": + kill[procName] = syscall.SIGSTOP + case "term": + kill[procName] = syscall.SIGTERM + case "int": + kill[procName] = syscall.SIGINT + case "quit": + kill[procName] = syscall.SIGQUIT + case "abrt": + kill[procName] = syscall.SIGABRT + case "hup": + kill[procName] = syscall.SIGHUP + case "usr1": + kill[procName] = syscall.SIGUSR1 + case "usr2": + kill[procName] = syscall.SIGUSR2 + default: + continue + } if cfg.Debug { log.Printf(