终止运行exec.Process
:
cmd := exec.Command("sleep", "5")
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
if err := cmd.Process.Kill(); err != nil {
log.Fatal("failed to kill process: ", err)
}
exec.Process
超时后终止运行:
cmd := exec.Command("sleep", "5")
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
done := make(chan error, 1)
go func() {
done <- cmd.Wait()
}()
select {
case <-time.After(3 * time.Second):
if err := cmd.Process.Kill(); err != nil {
log.Fatal("failed to kill process: ", err)
}
log.Println("process killed as timeout reached")
case err := <-done:
if err != nil {
log.Fatalf("process finished with error = %v", err)
}
log.Print("process finished successfully")
}
该过程结束并且在done
3秒钟内收到了错误(如果有的话),并且该程序在完成之前被终止了。
err := cmd.Process.Kill()
以防止内存泄漏。