当前位置: 首页 > 面试题库 >

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

公孙弘图
2023-03-14
问题内容

有没有办法终止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秒后终止该过程?

提前致谢


问题答案:

终止运行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秒钟内收到了错误(如果有的话),并且该程序在完成之前被终止了。



 类似资料:
  • 我试图用< code>exec()调用PHP CLI脚本中的一个长期运行的shell命令。但是我无论如何也想不出如何中断PHP脚本并杀死产生的子进程。好像我一调用< code>exec(),我的信号处理程序就被忽略了。下面的代码像我预期的那样工作;如果我向进程发送SIGTERM,它会回显< code>SIGTERM并立即退出。 但是,如果我替换< code > sleep(60);与< code

  • 问题内容: 尝试使用程序包运行命令时出现错误。 这是我要执行的操作的一个示例: err返回以下内容 输出返回此 当我更改此行时,实际上可以使脚本工作: 到以下内容: 该命令可以正常运行并成功移动文件,但无法使用通配符。在命令中似乎没有将星号用作通配符。这是为什么?还有其他在GO中使用通配符的方法吗?如果没有,那么我将如何将所有文件从递归移动到? 谢谢 问题答案: 在外壳程序上键入命令时,外壳程序将

  • 我有两个weblogic域,每个域都有一个托管服务器,问题是每3或4个小时可能会有不到四个进程突然被杀死,我在域控制台中发现了这一点。 ./startWebLogic。sh:第175行:53875杀死了${JAVA\u HOME}/bin/JAVA${JAVA\u VM}${MEM\u ARGS}-Dweblogic。名称=${SERVER\u Name}-Djava。安全策略=${WLU HOM

  • 问题内容: 我正在使用Linux,go和os /exec运行一些命令。我想知道一个进程的实时内存使用情况。这意味着我可以在启动进程后的任何时间(而不是在运行之后)随时请求内存使用情况。 (这就是为什么在回答测量使用golang可执行文件运行的内存使用量是 不是 一种选择对我来说) 例如: 我不需要非常精确的值,但是如果它的错误范围小于10兆字节,那就太好了。 有没有办法做到这一点,或者我需要某种命

  • 问题内容: 看一下这个人为的例子: 该程序的输出将仅为“ This will print”。goroutine的输出并且不会被发出,因为我想函数线程将在goroutines甚至有机会开始执行之前完成。 使类似的代码在Golang中工作并且不提前终止的惯用方式是什么? 问题答案: 最简单,最干净和“可扩展”的方法是使用: 输出(在Go Playground上尝试): 执行以下操作时要遵循的简单“规则

  • 我正在尝试使用shell命令检查php文件的语法错误,它在Windows(WAMP)中运行良好,但在linux上,由shell命令exec/shell_exec/popen等创建的进程从未终止,从而导致apache挂起,而这个进程被我强制终止。此外,在终止进程后也不会生成任何输出。 我的测试脚本是 文件测试。php是仅用于测试的一行php文件示例,其中包含 我用来检查语法错误的代码是: 还尝试使用