|
1 | 1 | package main
|
2 | 2 |
|
3 |
| -// Very simple utility which signals an event. Used to signal a docker |
4 |
| -// daemon on Windows to dump its stacks. Usage docker-signal --pid=daemonpid |
| 3 | +// Very simple utility which signals an event. Used to signal a process |
| 4 | +// on on Windows to either dump its stacks or it's debugger event. |
| 5 | +// Works across dockerd.exe; containerd.exe; containerd-shim-runhcs-v1.exe |
| 6 | +// Flags: -pid=daemonpid [-debugger] |
| 7 | + |
| 8 | +// go build -o signal-event.exe |
5 | 9 |
|
6 | 10 | import (
|
7 | 11 | "flag"
|
@@ -42,23 +46,30 @@ func PulseEvent(handle syscall.Handle) (err error) {
|
42 | 46 | }
|
43 | 47 |
|
44 | 48 | func main() {
|
45 |
| - var pid int |
46 |
| - var key string |
47 |
| - flag.StringVar(&key, "key", "docker-daemon", "The 'key' override in 'Global\\key-pid'. docker=docker-daemon, containerd=containerd-daemon, conatinerd-runhcs-shim-v1=containerd-shim-runhcs-v1") |
48 |
| - flag.IntVar(&pid, "pid", -1, "PID of process to signal to dump stacks") |
| 49 | + var ( |
| 50 | + pid int |
| 51 | + debugger bool |
| 52 | + ) |
| 53 | + flag.BoolVar(&debugger, "debugger", false, "Signal a debugger event rather than stackdump.") |
| 54 | + flag.IntVar(&pid, "pid", -1, "PID of process to signal") |
49 | 55 | flag.Parse()
|
50 | 56 | if pid == -1 {
|
51 | 57 | fmt.Println("Error: pid must be supplied")
|
52 | 58 | return
|
53 | 59 | }
|
| 60 | + key := "stackdump" |
| 61 | + if debugger { |
| 62 | + key = "debugger" |
| 63 | + } |
| 64 | + |
54 | 65 | ev := fmt.Sprintf("Global\\%s-%s", key, fmt.Sprint(pid))
|
55 | 66 | h2, _ := OpenEvent(EVENT_MODIFY_STATUS, false, ev)
|
56 | 67 | if h2 == 0 {
|
57 |
| - fmt.Printf("Could not open event. Check PID %d is correct and the daemon is running.\n", pid) |
| 68 | + fmt.Printf("Could not open event. Check PID %d is correct and is running.\n", pid) |
58 | 69 | return
|
59 | 70 | }
|
60 | 71 | PulseEvent(h2)
|
61 |
| - fmt.Println("Daemon signalled successfully. Examine its output for stacks") |
| 72 | + fmt.Println("Signalled successfully.") |
62 | 73 | }
|
63 | 74 |
|
64 | 75 | var temp unsafe.Pointer
|
|
0 commit comments