objective-c – 有没有办法检查进程是64位还是32位?
发布时间:2020-12-16 05:47:51 所属栏目:百科 来源:网络整理
导读:我正在尝试从进程pid查找进程类型(32位/ 64位)? 我使用这里描述的GetBSDProcessList方法获取过程信息和进程列表. 我们如何获得流程类型信息?有任何想法吗? 我可以使用定义(i386)或定义(x86_64),但只有当我们正在进行中.我没有进程. 解决方法 GetBSDProces
我正在尝试从进程pid查找进程类型(32位/ 64位)?
我使用这里描述的GetBSDProcessList方法获取过程信息和进程列表. 我们如何获得流程类型信息?有任何想法吗? 我可以使用定义(i386)或定义(x86_64),但只有当我们正在进行中.我没有进程. 解决方法
GetBSDProcessList返回kinfo_proc. kinfo_proc有一个kp_proc成员
which is of type
extern_proc . extern_proc
has a p_flag member,其中一个标志是P_LP64,表示“进程是LP64”).所以你应该可以检查:
int is64bit = proc->kp_proc.p_flags & P_LP64; (注:如注释所示,您需要使用http://osxbook.com/book/bonus/chapter8/core/download/gcore.c中找到的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; } ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |