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 關注
- 108 瀏覽
添加回答
舉報