Sto usando Vai per lanciare un paio di script e quando hanno alcuni problemi usano il segnale di "avviso", so che Go può catturare quei segnali ma ho bisogno di conoscere il PID che ha originato il Segnale. in C al gestore di segnale viene passato una struttura di conoscere il pid che ha originato il segnale, ma in Go sembra non è il casoVai: Ottieni l'origine del segnale
package main
import (
"fmt"
"os"
"os/signal"
)
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)
s := <-c
fmt.Println("Got signal:", s)
fmt.Printf("%+v\n",s)
}
l'esempio di seguito (estratta dal doc segnale) mi inviare il segnale che ha dato origine la chiamata ma non tutte le informazioni utili (come il pid)
come "esplosivo" questo aproach è? Voglio dire, ho solo bisogno del pid per essere catturato da una goroutine così posso uccidere il bambino mittente, niente di strano. – Freaktor
@Freaktor: Ti blocca a richiedere cgo e linux, potrebbe rompersi ad un certo punto, ed è probabile che ci sia qualcosa in cui probabilmente c'è un modo migliore. Forse se dovessi descrivere meglio qual è il segnale di "avviso" e perché il programma di go deve essere quello per uccidere il bambino. – JimB
ho chiamato alcuni plugin nagios e attualmente sto usando un timeout sull'esecuzione, ma lo standard nagios dice che i plug-in emetteranno il segnale di allarme se hanno qualche problema, quindi sto cercando di catturare quell'evento. – Freaktor