本篇将介绍如何在程序终止后获取有关子进程的PID和基本信息。

syscall
获取子进程信息

Golang 版本

1.12.1

前言

本篇将介绍如何在程序终止后获取有关子进程的PID和基本信息。

syscall

实现

main_running.go
package main

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

func main() {
	var cmd string
	if runtime.GOOS == "windows" {
		cmd = "timeout"
	} else {
		cmd = "sleep"
	}
	proc := exec.Command(cmd, "1")
	proc.Start()

	// 在进程结束之前不会返回任何进程状态
	fmt.Printf("运行进程的进程状态:%v\n", proc.ProcessState)

	// 获取正在运行进程的PID
	fmt.Printf("运行进程的PID:%d\n\n", proc.Process.Pid)
}

$ go run main_running.go
运行进程的进程状态:<nil>
运行进程的PID:45
main.go

原理

os/execCommandCmdCmd

关于这个进程,只能获取到很少的信息。但是通过获取到的进程PID,还可以通过系统方法来获取更多信息。

osProcessState