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

objective-c – 有没有办法检查进程是64位还是32位?,第1张

概述我正在尝试从进程pid查找进程类型(32位/ 64位)? 我使用这里描述的GetBSDProcessList方法获取过程信息和进程列表. 我们如何获得流程类型信息?有任何想法吗? 我可以使用定义(i386)或定义(x86_64),但只有当我们正在进行中.我没有进程. GetBSDProcessList返回kinfo_proc. kinfo_proc有一个kp_proc成员 which is of 我正在尝试从进程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 intB_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位?全部内容,希望文章能够帮你解决objective-c – 有没有办法检查进程是64位还是32位?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1250066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存