相关疑难解决方法(0)

如何使用Go启动,监视和终止进程

我正在Go中编写一个程序,它应该打开一个可移植的浏览器到一个给定的页面并监视它,这样如果浏览器关闭,它应该自动重新打开.程序退出时也应该关闭浏览器.

到目前为止,我已经设法在用户关闭浏览器时重新打开浏览器,但是我无法关闭它.

这是我的代码:

package browser

import (
    "fmt"
    "os/exec"

    log "github.com/sirupsen/logrus"
)

type iBrowserHandler interface {
    Start(processListener chan bool) error
    Stop() error
    KillProcess() error
}

type browserHandler struct {
    cmd            *exec.Cmd
    pathToChromium string
    pdvEndpoint    string
}

func newBrowserHandler(pathToChromium string, pdvEndpoint string) iBrowserHandler {
    b := &browserHandler{}
    b.pathToChromium = pathToChromium
    b.pdvEndpoint = pdvEndpoint

    return b
}

func (b *browserHandler) Start(processListener chan bool) error {
    endpoint := fmt.Sprintf("--app=%s", b.pdvEndpoint)

    b.cmd = exec.Command(b.pathToChromium, endpoint, "--kiosk")
    err := b.cmd.Run()
    if err != nil { …
Run Code Online (Sandbox Code Playgroud)

go

5
推荐指数
1
解决办法
3209
查看次数

杀死父进程的所有子进程但让父进程保持活动状态

杀死父进程而不是父进程的最佳方法是什么?假设我有一个不确定数量的子进程,我已经分叉并在给定的警报中,在我的信号处理程序中,我想杀死我所有的子进程,但由于各种原因让自己继续运行。

截至目前,我正在使用 kill(-1*parentPid, SIGKILL) 但这会杀死我的父母及其孩子。

c unix process

4
推荐指数
1
解决办法
3万
查看次数

子进程的Process.Kill()

我正在尝试停止启动进程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()
}
Run Code Online (Sandbox Code Playgroud)

它看起来Process.Kill()只会停止go (run)进程,但会使其子进程(Web服务器)运行.

^C杀死整个过程组,包括所有子(和子子)过程.我怎么能这样做? …

go

4
推荐指数
1
解决办法
3010
查看次数

标签 统计

go ×2

c ×1

process ×1

unix ×1