golang标准库os模块-进程相关操作

golang标准库os模块-进程相关操作

package main

import (
	"fmt"
	"os"
	"time"
)

func main() {
	// 获取当前正在运行的进程id
	fmt.Printf("os.Getpid(): %v\n", os.Getpid())
	// 父id
	fmt.Printf("os.Getppid(): %v\n", os.Getppid())

	// 设置新进程的属性
	attr := &os.ProcAttr{
		// files指定新进程集成的活动文件对象
		// 前三个分别为 标准输入 标准输出 标准错误输出
		Files: []*os.File{
			os.Stdin,
			os.Stdout,
			os.Stderr,
		},
		// 新进程的环境变量
		Env: os.Environ(),
	}
	p, err := os.StartProcess("C:\\Windows\\System32\\notepad.exe", []string{"C:\\Windows\\System32\\notepad.exe", "D:\\a.txt"}, attr)
	if err != nil {
		fmt.Printf("err: %v\n", err)
	}
	fmt.Printf("p: %v\n", p)
	fmt.Println("进程ID--->", p.Pid)
	// 通过进程ID查找进程
	p2, err2 := os.FindProcess(p.Pid)
	if err2 != nil {
		fmt.Printf("err2: %v\n", err2)
	}
	fmt.Printf("p2: %v\n", p2)
	// 等一会,执行关闭进程
	time.AfterFunc(time.Second*5, func() {
		// 关闭进程
		p.Signal(os.Kill)
	})
	// 等待进程退出
	ps, err3 := p.Wait()
	if err3 != nil {
		fmt.Printf("err3: %v\n", err3)
	}
	fmt.Printf("ps.String(): %v\n", ps.String())

}

运行结果
在这里插入图片描述