main.go 668 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package main
  2. import (
  3. "os"
  4. "syscall"
  5. "time"
  6. "github.com/docker/docker/cmd/dockerd/trap"
  7. )
  8. func main() {
  9. sigmap := map[string]os.Signal{
  10. "TERM": syscall.SIGTERM,
  11. "QUIT": syscall.SIGQUIT,
  12. "INT": os.Interrupt,
  13. }
  14. trap.Trap(func() {
  15. time.Sleep(time.Second)
  16. os.Exit(99)
  17. })
  18. go func() {
  19. p, err := os.FindProcess(os.Getpid())
  20. if err != nil {
  21. panic(err)
  22. }
  23. s := os.Getenv("SIGNAL_TYPE")
  24. multiple := os.Getenv("IF_MULTIPLE")
  25. switch s {
  26. case "TERM", "INT":
  27. if multiple == "1" {
  28. for {
  29. p.Signal(sigmap[s])
  30. }
  31. } else {
  32. p.Signal(sigmap[s])
  33. }
  34. case "QUIT":
  35. p.Signal(sigmap[s])
  36. }
  37. }()
  38. time.Sleep(2 * time.Second)
  39. }