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

子进程上的Process.Kill()

东郭鹤龄
2023-03-14
问题内容

我正在尝试停止始于其exec.Command("go", "run", "server.go")所有子进程的进程。

但是,当我调用cmd.Process.Kill()并且该go进程停止时,子进程(中的Web服务器server.go)继续运行。

package main

import (
    "fmt"
    "os/exec"
    "time"
)

func run() *exec.Cmd {
    cmd := exec.Command("go", "run", "server.go")

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

    return cmd
}

func main() {
    cmd := run()

    time.Sleep(time.Second * 2)

    err := cmd.Process.Kill()
    if err != nil {
        panic(err)
    }
    cmd.Process.Wait()

    // === Web server is still running! ===

    fmt.Scanln()
}

看起来它Process.Kill()只是停止了该go (run)进程,但使其子进程(Web服务器)保持运行状态。

^C杀死整个进程组,包括所有子进程(子进程)。我该怎么做?

我试过cmd.Process.Signal(os.Interrupt)syscall.SIGINTsyscall.SIGQUITsyscall.SIGKILL,其中没有一个做了什么。


问题答案:

不要使用该go run命令。使用the go install命令安装软件包和程序,然后执行程序。



 类似资料:
  • 我得到了一个用java编写的应用程序,它在Unix上运行,并在启动时启动两个子进程(via)。如果应用程序因某种原因崩溃,子进程不会被杀死。 现在,我添加了一个关闭钩子,每次崩溃都会触发它,到目前为止还可以。但是我想在UNIX控制台上为应用程序的每个子进程发送一个SIGTERM信号(或至少SIGINT)。我应该能够通过找到他们的进程ID,但是我没有正确提取PID并为每个进程发送信号。 有人能帮忙吗

  • 其他堆栈溢出引用:使用FFMPEG提取帧的最快方法?

  • 我尝试使用C语言中的< code>fork()函数处理Linux中的多个进程,这是我的代码: 现在让我们假设父进程ID为100,两个子进程(p1, p2)ID为101 相反,我看到了一些不同的东西,两个子进程具有相同的PPID,但第一个进程具有与之不同的PID。这是我得到的示例输出: 我的问题是,两个子进程的父PID不应该是3383吗?希望有人能解释这一切在这里是如何运作的,以及我做错了什么(或想

  • 问题内容: 如何在Windows上的Python中等待多个子进程,而无需主动等待(轮询)?这样的事情 几乎 对我有用: 问题是,当之前完成时,父进程仍将等待。在Unix上,人们会在循环中使用它们来获取子进程的返回代码,这些代码在完成时如何在Windows上的Python中实现类似功能? 问题答案: 可能看起来有些矫kill过正,但是,在这里:

  • 问题内容: 我想同时运行许多进程并能够随时输出stdout。我该怎么办?我需要为每个调用运行线程吗? 问题答案: 您可以在一个线程中完成。 假设您有一个脚本可以随机打印行: 而且您想在输出可用后立即收集它,您可以按照@zigg的建议在POSIX系统上 使用: 更具可移植性的解决方案(应在Windows,Linux,OSX上运行)可以为每个进程使用读取器线程,请参阅python中的对子进程的非阻塞读

  • 问题内容: 我正在使用python的多处理模块来生成新进程 如下 : 我想获取iostat命令的pid或使用多处理模块执行的命令 当我执行时: 它给了我运行此命令的subshel​​l的pid。 任何帮助都是有价值的。 提前致谢 问题答案: 你可以使用psutil: