/ / golang exécute une commande sur un binaire / processus en cours d'exécution - aller, système d'exploitation, signaux

golang exécute une commande sur un processus / binaire en cours d'exécution - aller, système d'exploitation, signaux

Si vous regardez Nginx, il appelle "nginx reload" pourse recharger. Existe-t-il un moyen d'envoyer un signal de la ligne de commande à un processus en cours? Même si le processus principal démarre des processus enfants, comment puis-je envoyer des commandes au principal pour avertir ses enfants?

ex:

myapp start -debug // starts a server
myapp reload -gracefull // stops the app gracefully

Maintenant, je dois envoyer des signaux OS pour informer mon serveur d'effectuer un arrêt gracieux

kill -QUIT pid
kill -USR2 pid

J'espère que ma question est assez claire Thnx

Réponses:

7 pour la réponse № 1

Jetez un oeil à la os/signal paquet.

Le signal de package implémente l'accès aux signaux entrants.

Il y a même un Exemple dans la documentation:

// Set up channel on which to send signal notifications.
// We must use a buffered channel or risk missing the signal
// if we"re not ready to receive when the signal is sent.
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)

// Block until a signal is received.
s := <-c
fmt.Println("Got signal:", s)

Envoyer des signaux

Pour voir comment envoyer des signaux, regardez signal_test.go, il utilise syscall. Par exemple :

// Send this process a SIGHUP
t.Logf("sighup...")
syscall.Kill(syscall.Getpid(), syscall.SIGHUP)
waitSig(t, c, syscall.SIGHUP)

0 pour la réponse № 2

J'ai compris que dans go i, nous pouvons passer l'environnement à syscall.Exec

err := syscall.Exec(argv0. os.Args. os.Environ())

copie simplement l'env en cours dans le processus enfant.