Is there a way to terminate a process started with os.exec in Golang? For example (from http://golang.org/pkg/os/exec/#example_Cmd_Start),

cmd := exec.Command("sleep", "5")

err := cmd.Start()

if err != nil {

log.Fatal(err)

}

log.Printf("Waiting for command to finish...")

err = cmd.Wait()

log.Printf("Command finished with error: %v", err)

Is there a way to terminate that process ahead of time, perhaps after 3 seconds?

Thanks in advance

解决方案

Terminating a running exec.Process:

// Start a process:

cmd := exec.Command("sleep", "5")

if err := cmd.Start(); err != nil {

log.Fatal(err)

}

// Kill it:

if err := cmd.Process.Kill(); err != nil {

log.Fatal("failed to kill process: ", err)

}

Terminating a running exec.Process after a timeout:

// Start a process:

cmd := exec.Command("sleep", "5")

if err := cmd.Start(); err != nil {

log.Fatal(err)

}

// Wait for the process to finish or kill it after a timeout:

done := make(chan error, 1)

go func() {

done

}()

select {

case

if err := cmd.Process.Kill(); err != nil {

log.Fatal("failed to kill process: ", err)

}

log.Println("process killed as timeout reached")

case err :=

if err != nil {

log.Fatalf("process finished with error = %v", err)

}

log.Print("process finished successfully")

}

Either the process ends and its error (if any) is received through done or 3 seconds have passed and the program is killed before it's finished.