我正在尝试停止始于其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.SIGINT
,syscall.SIGQUIT
和syscall.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或使用多处理模块执行的命令 当我执行时: 它给了我运行此命令的subshell的pid。 任何帮助都是有价值的。 提前致谢 问题答案: 你可以使用psutil: