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

我正在尝试从进程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;
}

)

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...