Browse code

Allow "SIG" prefix on signal names in `docker kill` ("SIGKILL", etc)

This way, we can use both `docker kill -s INT some_container` and `docker kill -s SIGINT some_container` and both will do nice things for us. :)

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)

Tianon Gravi authored on 2014/04/01 11:22:28
Showing 2 changed files
... ...
@@ -1129,8 +1129,13 @@ func TestCmdKill(t *testing.T) {
1129 1129
 	})
1130 1130
 
1131 1131
 	setTimeout(t, "SIGUSR2 timed out", 2*time.Second, func() {
1132
-		for i := 0; i < 10; i++ {
1133
-			if err := cli2.CmdKill("--signal=USR2", container.ID); err != nil {
1132
+		for i := 0; i < 20; i++ {
1133
+			sig := "USR2"
1134
+			if i%2 != 0 {
1135
+				// Swap to testing "SIGUSR2" for every odd iteration
1136
+				sig = "SIGUSR2"
1137
+			}
1138
+			if err := cli2.CmdKill("--signal="+sig, container.ID); err != nil {
1134 1139
 				t.Fatal(err)
1135 1140
 			}
1136 1141
 			if err := expectPipe("SIGUSR2", stdout); err != nil {
... ...
@@ -144,6 +144,10 @@ func (srv *Server) ContainerKill(job *engine.Job) engine.Status {
144 144
 		if err != nil {
145 145
 			// The signal is not a number, treat it as a string
146 146
 			sig = uint64(signal.SignalMap[job.Args[1]])
147
+			if sig == 0 && strings.HasPrefix(job.Args[1], "SIG") {
148
+				// If signal is prefixed with SIG, try with it stripped (ie, "SIGKILL", etc)
149
+				sig = uint64(signal.SignalMap[job.Args[1][3:]])
150
+			}
147 151
 			if sig == 0 {
148 152
 				return job.Errorf("Invalid signal: %s", job.Args[1])
149 153
 			}