Ich verwende Go, um ein paar Skripts zu starten, und wenn sie ein paar Probleme haben, benutzen sie das "Alarm" -Signal, ich weiß, Go kann diese Signale erfassen, aber ich muss die PID wissen, die den Ursprung hat Signal. in C auf das Signal-Handler wird eine Struktur geleitet, um die pid zu wissen, wer das Signal stammt, aber in Go sieht aus wie nicht der Fall istGo: Signalursprung
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)
}
das folgende Beispiel (aus dem Signal doc extrahiert) senden Sie mir das Signal, die ihren Ursprung der Anruf aber keine nützlichen Informationen (wie die PID)
wie "explosiven" diese aproach ist? Ich meine, ich brauche nur die PID, um von einer Gorroutine gefangen zu werden, damit ich das Absenderkind töten kann, nichts Schickes. – Freaktor
@Freaktor: Es sperrt dich in die Notwendigkeit von Cgo und Linux, es kann irgendwann brechen, und es ist wahrscheinlich für etwas, wo es wahrscheinlich einen besseren Weg gibt. Vielleicht, wenn du besser beschreibst, was das "Alarmsignal" ist und warum das Go-Programm derjenige sein muss, um das Kind zu töten. – JimB
Ich rufe einige Nagios-Plugins an und verwende im Moment ein Timeout über die Ausführung, aber der Nagios-Standard sagt, dass die Plugins das Alarmsignal aussenden werden, wenn sie ein Problem haben, also versuche ich dieses Ereignis einzufangen. – Freaktor