main.go 723 B

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