瀏覽代碼

force kill now use lxc-kill. Fixes #383

Guillaume J. Charmes 12 年之前
父節點
當前提交
e68c04b722
共有 1 個文件被更改,包括 14 次插入2 次删除
  1. 14 2
      container.go

+ 14 - 2
container.go

@@ -550,9 +550,21 @@ func (container *Container) kill() error {
 	if !container.State.Running || container.cmd == nil {
 	if !container.State.Running || container.cmd == nil {
 		return nil
 		return nil
 	}
 	}
-	if err := container.cmd.Process.Kill(); err != nil {
-		return err
+
+	// Sending SIGINT to the process via lxc
+	output, err := exec.Command("lxc-kill", "-n", container.Id, "9").CombinedOutput()
+	if err != nil {
+		Debugf("error killing container %s (%s, %s)", container.Id, output, err)
 	}
 	}
+
+	// 2. Wait for the process to die, in last resort, try to kill the process directly
+	if err := container.WaitTimeout(10 * time.Second); err != nil {
+		log.Printf("Container %s failed to exit within 10 seconds of SIGINT - trying direct SIGKILL", container.Id)
+		if err := container.cmd.Process.Kill(); err != nil {
+			return err
+		}
+	}
+
 	// Wait for the container to be actually stopped
 	// Wait for the container to be actually stopped
 	container.Wait()
 	container.Wait()
 	return nil
 	return nil