gpt4 book ai didi

objective-c - 有没有办法检查进程是 64 位还是 32 位?

转载 作者:太空狗 更新时间:2023-10-30 03:26:02 24 4
gpt4 key购买 nike

我正在尝试从进程 pid 中查找进程类型(32 位/64 位)?

我使用 GetBSDProcessList 获取进程信息和进程列表此处描述的方法。

如何获取进程类型信息?有什么想法吗?

我可以使用 defined(i386) 或 defined(x86_64) 但前提是我们正在处理中。我退出了流程。

最佳答案

GetBSDProcessList 返回一个kinfo_prockinfo_proc 有一个 kp_proc 成员 which is of type extern_procextern_proc has a p_flag member,标志之一是P_LP64,表示“Process is LP64”)。所以你应该能够检查:

int is64bit = proc->kp_proc.p_flags & P_LP64;

(注意:如注释所示,需要使用Link中找到的B_get_process_info:

static int
B_get_process_info(pid_t pid, struct kinfo_proc *kp)
{
size_t bufsize = 0;
size_t orig_bufsize = 0;
int retry_count = 0;
int local_error = 0;
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, 0 };

mib[3] = pid;
orig_bufsize = bufsize = sizeof(struct kinfo_proc);

for (retry_count = 0; ; retry_count++) {
local_error = 0;
bufsize = orig_bufsize;
if ((local_error = sysctl(mib, 4, kp, &bufsize, NULL, 0)) < 0) {
if (retry_count < 1000) {
sleep(1);
continue;
}
return local_error;
} else if (local_error == 0) {
break;
}
sleep(1);
}

return local_error;
}

)

关于objective-c - 有没有办法检查进程是 64 位还是 32 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com