From 00f7aee301a9000d6e5aac33728fa56d4da1fb5b Mon Sep 17 00:00:00 2001 From: xc Date: Fri, 29 Aug 2025 15:46:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1=E7=AB=AF?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aufs/main.go | 1 + scagent/go.mod | 3 +++ scagent/log/sealog.go | 1 + scagent/main.go | 55 +++++++++++++++++++++++++++++++++++++++++++ scagent/readme.md | 3 +++ 5 files changed, 63 insertions(+) create mode 100644 scagent/go.mod create mode 100644 scagent/log/sealog.go create mode 100644 scagent/main.go create mode 100644 scagent/readme.md diff --git a/aufs/main.go b/aufs/main.go index fe2db18..da6cfef 100644 --- a/aufs/main.go +++ b/aufs/main.go @@ -116,6 +116,7 @@ func main() { if ok { msg := "OS Signal received: " + sign.String() log.Println(msg) + os.Exit(0) } // // log.Println("exit AUFS application") diff --git a/scagent/go.mod b/scagent/go.mod new file mode 100644 index 0000000..d80063e --- /dev/null +++ b/scagent/go.mod @@ -0,0 +1,3 @@ +module scagnet + +go 1.22.1 diff --git a/scagent/log/sealog.go b/scagent/log/sealog.go new file mode 100644 index 0000000..7330d54 --- /dev/null +++ b/scagent/log/sealog.go @@ -0,0 +1 @@ +package log diff --git a/scagent/main.go b/scagent/main.go new file mode 100644 index 0000000..8a89f0b --- /dev/null +++ b/scagent/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "fmt" + "os" + "os/signal" + "syscall" +) + +// 输入-d 参数,以守护进程方式运行 +func isDaemon() bool { + for _, arg := range os.Args { + if arg == "-d" { + fmt.Println("以守护进程方式运行") + return true + } + } + fmt.Println("以非守护进程方式运行") + return false +} + +// 优雅退出(退出信号) +func waitElegantExit(signalChan chan os.Signal) { + for i := range signalChan { + switch i { + case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT: + // 这里做一些清理操作或者输出相关说明,比如 断开数据库连接 + fmt.Println("receive exit signal ", i.String(), ",exit...") + os.Exit(0) + } + } +} + +func main() { + fmt.Println("JSON RPC服务端") + // 检查是否以守护进程方式运行 + if isDaemon() { + // 以守护进程方式运行 + } + // 优雅退出 + // quit := make(chan os.Signal) + // signal.Notify(quit, os.Interrupt, os.Kill) + // v := <-quit + // fmt.Println("退出信号:", v) + + c := make(chan os.Signal) + // SIGHUP: terminal closed + // SIGINT: Ctrl+C + // SIGTERM: program exit + // SIGQUIT: Ctrl+/ + signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) + + // 阻塞,直到接受到退出信号,才停止进程 + waitElegantExit(c) +} diff --git a/scagent/readme.md b/scagent/readme.md new file mode 100644 index 0000000..dfb0fb8 --- /dev/null +++ b/scagent/readme.md @@ -0,0 +1,3 @@ +## 说明 + +封装后的程序运行在linux服务器,客户端通过json_rpc方式访问。 \ No newline at end of file