5 changed files with 63 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||
module scagnet |
|||
|
|||
go 1.22.1 |
|||
@ -0,0 +1 @@ |
|||
package log |
|||
@ -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) |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
## 说明 |
|||
|
|||
封装后的程序运行在linux服务器,客户端通过json_rpc方式访问。 |
|||
Loading…
Reference in new issue