有没有一种方法来检查,如果过程是64位还是32位? [英] Is there a way to check if process is 64 bit or 32 bit?

查看:98
本文介绍了有没有一种方法来检查,如果过程是64位还是32位?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从进程的PID找到处理类型(32位/ 64位)?

I am trying to find process type (32 bit/ 64bit) from process pid?

我从使用过程中的信息和进程列表<一个href=\"http://www.cocoabuilder.com/archive/cocoa/92971-bsd-processes-with-$c$c.html\">GetBSDProcessList这里介绍的方法。

I get the process information and process list from using GetBSDProcessList method described here.

我们如何能得到处理的类型信息?任何想法?

how can we get the process type information? Any Ideas?

我可以使用定义( 386 )或定义( x86_64的),但只有当我们在过程中。我出的过程中。

I can use defined(i386) or defined(x86_64) but only if we are in process. I am out of the process.

推荐答案

GetBSDProcessList返回 kinfo_proc增加。在 kinfo_proc增加有一个 kp_proc 成员的which的类型是 extern_proc 的。在 extern_proc 有一个 p_flag中成员,其标志之一就是 P_LP64 ,表示过程是LP64)。所以,你应该能够检查有:

GetBSDProcessList returns a kinfo_proc. The kinfo_proc has a kp_proc member which is of type extern_proc. The extern_proc has a p_flag member, which one of the flags is P_LP64, indicating "Process is LP64"). So you should be able to check with:

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


(注:由于在评论中所示,您需要使用 B_get_process_info 在<已找到href=\"http://osxbook.com/book/bonus/chapter8/core/download/gcore.c\">http://osxbook.com/book/bonus/chapter8/core/download/gcore.c:

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;
}

这篇关于有没有一种方法来检查,如果过程是64位还是32位?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆