Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to check if process is 64 bit or 32 bit?

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

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

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

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

like image 534
RLT Avatar asked Nov 02 '11 16:11

RLT


People also ask

How do I know if my application is 32-bit?

The easiest way, without installing another program or running the file, is just to right click on the file, choose Properties, and then go the the Compatibility tab. If there are no greyed out options and Windows XP and 9x modes are offered, it's 32-bit.


1 Answers

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;

(Note: As shown in the comment, you need to use the B_get_process_info found in 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;
}

)

like image 52
kennytm Avatar answered Oct 13 '22 00:10

kennytm