我正在使用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,我会尝试 …