|
Někdy bychom chtěli, aby naše Go programy inteligentně
ošetřovaly Unixové signály.
Například můžeme chtít, aby server elegantně
skončil, když dostane signál |
|
![]()
package main
|
|
import (
"context"
"fmt"
"os/signal"
"syscall"
)
|
|
|
|
func main() {
|
ctx, stop := signal.NotifyContext(
context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer stop()
|
|
|
Program zde bude čekat, dokud nedostane jeden z nastavených signálů. |
fmt.Println("awaiting signal")
<-ctx.Done()
|
|
|
fmt.Println()
fmt.Println(context.Cause(ctx))
fmt.Println("exiting")
}
|
|
Když spustíme tento program, bude blokovat a čekat
na signál. Stisknutím |
$ go run signals.go
awaiting signal
^C
interrupt signal received
exiting
|
Další příklad: Exit.