2 回答

TA贡献1900条经验 获得超5个赞
Go 不会公开中的句柄,您将不得不通过它来访问它。exec.Command
反射
cmd := exec.Command("cmd.exe")
cmd.Start()
handle := uintptr(reflect.ValueOf(cmd.Process).Elem().FieldByName("handle").Uint())
或者通过创建相同的“进程”类型并将 Cmd.Process 强制转换为您自己的类型以访问私有字段。
type Process struct {
Pid int
handle uintptr
isdone uint32
sigMu sync.RWMutex
}
cmd := exec.Command("cmd.exe")
cmd.Start()
proc := (*Process)(unsafe.Pointer(cmd.Process))
println(proc.handle)

TA贡献1790条经验 获得超9个赞
“Make that 4”的答案都是完美的,简单而解释得很好。
我只是添加一个我发现的其他方法,只是为了完整性(需要导入)
更新:显然这种方法可能会导致错误/错误,最好不要实现它(检查注释)golang.org/x/sys/windows
cmd := exec.Command("cmd.exe")
cmd.Start()
// using PROCESS_SUSPEND_RESUME since I want to call NtSuspendProcess function
handle, _ := windows.OpenProcess(windows.PROCESS_SUSPEND_RESUME, false, uint32(cmd.Process.Pid))
defer windows.CloseHandle(handle)
fmt.Println(handle)
- 2 回答
- 0 关注
- 123 浏览
添加回答
举报