tl;dt https://github.com/nozo-moto/signal_kansitai
Un peu de recherche, je voulais savoir quel type de signal était envoyé à l'application
Le langage Go peut être géré lorsqu'il y a un signal dans la goroutine créée en procédant comme suit.
c := make(chan os.Signal)
signal.Notify(c)
go func() {
for {
s := <-c
log.Println("signal :", s)
}
}
}()
Bonne journalisation Je voulais écrire dans la sortie standard et le fichier journal, j'ai donc utilisé ʻio.MultiWriter`
logfile, err := os.OpenFile("./signal.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
panic("cannnot create log :" + err.Error())
}
defer logfile.Close()
log.SetOutput(io.MultiWriter(logfile, os.Stdout))
log.SetFlags(log.Ldate | log.Ltime)
Il gère le signal comme ça et l'envoie
% tail -f signal.log
2020/02/09 21:48:01 alive :
2020/02/09 21:49:01 alive :
2020/02/09 21:50:01 alive :
2020/02/09 21:50:33 signal : hangup false
J'ai essayé de le laisser tomber lorsque SIGTERM a été envoyé. La survie est confirmée une fois toutes les 60 secondes. De plus, les systèmes qui ne peuvent pas être manipulés, tels que SIGKILL, ne peuvent pas être manipulés et mourir.
J'ai découvert qu'il y avait un signal pour changer la taille de la fenêtre du terminal appelé SIGWINCH.
Recommended Posts