golang實現daemon守護進程,支持goroutine和系統信號監聽


網上看了好多解決方案,要不就是不支持goroutine, 要不就是不支持系統信號監聽。自己嘗試了一下,算是可以是滿足需求了

package main

import (
	"os"
	"fmt"
	"os/signal"
	"syscall"
	"time"
	"log"
	"os/exec"
)
func init() {
	if os.Getppid() != 1{
		cmd := exec.Command(os.Args[0], os.Args[1:]...)
		cmd.Start()
		os.Exit(0)
	}

	// 監聽系統信號
	go func() {
		_c := make(chan os.Signal, 1)
		signal.Notify(_c, os.Interrupt, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGKILL, syscall.SIGTSTP)
		msg := <- _c
		log.Println(msg)
		os.Exit(0)
	}()
}

func main()  {

	go func(){
		fp, _ := os.OpenFile("log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
		log.SetOutput(fp)
		for{
			log.Println(fmt.Sprint("hello ", os.Getpid()))
			time.Sleep(time.Second * 5)
		}
	}()

	for{
		time.Sleep(time.Second * 1000)
	}

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM