Go语言daemon启动本身.实现

前端之家收集整理的这篇文章主要介绍了Go语言daemon启动本身.实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@package main @H_301_0@ @H_301_0@import ( @H_301_0@"fmt" @H_301_0@"log" @H_301_0@"net/http" @H_301_0@"os" @H_301_0@"os/signal" @H_301_0@"syscall" @H_301_0@) @H_301_0@ @H_301_0@func main() { @H_301_0@File,err := os.Create("log") @H_301_0@if err != nil { @H_301_0@fmt.Println("创建日志文件错误",err) @H_301_0@return @H_301_0@} @H_301_0@log.SetOutput(File) @H_301_0@ce("pid") @H_301_0@} @H_301_0@ @H_301_0@func ce(pid string) { @H_301_0@File,err := os.OpenFile(pid,os.O_RDWR|os.O_CREATE,0644) @H_301_0@if err != nil { @H_301_0@log.Println(err) @H_301_0@return @H_301_0@} @H_301_0@info,_ := File.Stat() @H_301_0@if info.Size() != 0 { @H_301_0@log.Println("pid file is exist") @H_301_0@return @H_301_0@} @H_301_0@if os.Getppid() != 1 { @H_301_0@args := append([]string{os.Args[0]},os.Args[1:]...) @H_301_0@os.StartProcess(os.Args[0],args,&os.ProcAttr{Files: []*os.File{os.Stdin,os.Stdout,os.Stderr}}) @H_301_0@return @H_301_0@} @H_301_0@File.WriteString(fmt.Sprint(os.Getpid())) @H_301_0@c := make(chan os.Signal,1) @H_301_0@signal.Notify(c,os.Interrupt,syscall.SIGUSR2) @H_301_0@go HttpServer() @H_301_0@for { @H_301_0@s := <-c @H_301_0@switch s { @H_301_0@case syscall.SIGUSR2: @H_301_0@fmt.Println("自定义型号.") @H_301_0@case os.Interrupt: @H_301_0@fmt.Println("安全退出") @H_301_0@Exit(File) @H_301_0@} @H_301_0@} @H_301_0@} @H_301_0@ @H_301_0@func HttpServer() { @H_301_0@http.HandleFunc("/",route) @H_301_0@http.ListenAndServe(":1789",nil) @H_301_0@} @H_301_0@ @H_301_0@func route(w http.ResponseWriter,r *http.Request) { @H_301_0@log.Println(r.URL.Path) @H_301_0@fmt.Fprint(w,"Hello World\n") @H_301_0@} @H_301_0@func Exit(F *os.File) { @H_301_0@F.Close() @H_301_0@os.Remove(F.Name()) @H_301_0@fmt.Println("bye") @H_301_0@}

猜你在找的Go相关文章