如何解决如何获得子进程的句柄 uintptr?
我想启动一个子进程(我使用的是 Windows 10)并且我希望能够随意暂停和恢复该进程。
我发现这个来自 NtSuspendProcess
的整洁的未记录的 windows 函数 ntdll.dll
应该可以完成这项工作,但现在我需要获取进程的句柄来发出挂起命令。
这是一个例子:
modntdll = syscall.NewLazyDLL("ntdll.dll")
procNtSuspendProcess = modntdll.NewProc("NtSuspendProcess")
procNtResumeProcess = modntdll.NewProc("NtResumeProcess")
_,_,err = procNtSuspendProcess.Call(uintptr(handle))
_,err = procNtResumeProcess.Call(uintptr(handle))
要启动进程,我通常会使用 exec.Command
函数,但我找不到检索进程句柄的方法。
有没有办法在启动进程时获取句柄?
如果没有 exec.Command
,我应该使用其他什么库来启动一个同时返回进程句柄的进程?
附注:
我已经研究过 syscall.StartProcess
,但它的级别很低,我觉得无法处理这样一个原始的实现。
_,handle,err := syscall.StartProcess("C:\\WINDOWS\\system32\\cmd.exe",[]string{},procAttr)
解决方法
Go 不会公开 # Sample data network plot
import networkx as nx
import pandas as pd
data = {'ID': {0: 1,1: 2,2: 4,3: 4,4: 12,5: 12,6: 13,7: 17},'Target': {0: 12,1: 24,2: 13,3: 12,4: 1,5: 4,6: 4,7: 1},'Weight': {0: 0.4,1: 0.1,2: 0.5,3: 0.3,4: 0.1,5: 0.4,6: 0.2,7: 0.1},'Label': {0: 1,1: 0,2: 1,3: 1,5: 1,6: 1,7: 0}}
df = pd.DataFrame.from_dict(data)
G = nx.from_pandas_edgelist(df,source='ID',target='Target',edge_attr=['Weight','Label'])
width = [20 * d['Weight'] for (u,v,d) in G.edges(data=True)]
edge_color = [d['Label'] for (u,d) in G.edges(data=True)]
nx.draw_networkx(G,width=width,edge_color=edge_color)
中的句柄,您必须通过 .
反思
exec.Command
或者通过创建相同的 Process 类型并将 Cmd.Process 转换为您自己的类型以访问私有字段。
cmd := exec.Command("cmd.exe")
cmd.Start()
handle := uintptr(reflect.ValueOf(cmd.Process).Elem().FieldByName("handle").Uint())
type Process struct {
Pid int
handle uintptr
isdone uint32
sigMu sync.RWMutex
}
,
“Make that 4”的 answer 都完美无瑕,简单明了,解释也很好。
我只想添加一个我发现的额外方法,只是为了完整性(需要导入 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。