小编Pet*_*ren的帖子

如何正确等待事件/流程完成不是父母?

我正在使用GO检查一个进程(不是父进程)是否已经终止,基本上类似于FreeBSD中pwait命令但是用go编写.

目前,我尝试了for loop一个kill -0,但我注意到,CPU的使用率是非常高的99%,使用这种方法,这里是代码:

package main

import (
    "fmt"
    "os"
    "strconv"
    "syscall"
    "time"
)

func main() {

    if len(os.Args) != 2 {
        fmt.Printf("usage: %s pid", os.Args[0])
        os.Exit(1)
    }

    pid, err := strconv.ParseInt(os.Args[1], 10, 64)
    if err != nil {
        panic(err)
    }

    process, err := os.FindProcess(int(pid))

    err = process.Signal(syscall.Signal(0))
    for err == nil {
        err = process.Signal(syscall.Signal(0))
        time.Sleep(500 * time.Millisecond) 
    }
    fmt.Println(err)
}
Run Code Online (Sandbox Code Playgroud)

知道如何改进或正确实现这一点.

提前致谢.

UPDATE

sleep像建议的那样在循环内添加,有助于减少负载.

从提供的链接,似乎可以附加到现有的pid,我会尝试 …

linux freebsd go kqueue

9
推荐指数
1
解决办法
724
查看次数

标签 统计

freebsd ×1

go ×1

kqueue ×1

linux ×1