为了账号安全,请及时绑定邮箱和手机立即绑定

在Golang中终止以os / exec开头的进程

在Golang中终止以os / exec开头的进程

Go
蓝山帝景 2021-04-27 21:26:25
有没有办法终止Golang中以os.exec开始的进程?例如(来自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)是否有办法提前(可能在3秒后)终止该过程?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

终止运行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)

}

exec.Process超时后终止运行:


// 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 (whichever happens first):

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")

}

该过程结束并且在done3秒钟内收到了错误(如果有的话),并且该程序在完成之前被终止了。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信