2022年5月15日 星期日

[C/C++] 程序號碼(process id)

說明:
程序號碼(process id)

Code:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>

#define MAX_LONG_LENGTH         1024
#define MAX_SHORT_LENGTH        128

unsigned int get_process_id_fun(char *app_name)
{
    DIR *dir_p = NULL;
    struct dirent *dir_entry_p = NULL;
    char dir_name[MAX_SHORT_LENGTH];
    char target_name[MAX_SHORT_LENGTH];
    char exe_link[MAX_SHORT_LENGTH];
    int target_result = -1;
    int result = -1;

    dir_p = opendir("/proc/");
    while(NULL != (dir_entry_p = readdir(dir_p))) 
    { 
        if (strspn(dir_entry_p->d_name, "0123456789") 
                == strlen(dir_entry_p->d_name)) 
        {
            strcpy(dir_name, "/proc/");
            strcat(dir_name, dir_entry_p->d_name);
            strcat(dir_name, "/"); 
            exe_link[0] = 0;
            strcat(exe_link, dir_name);
            strcat(exe_link, "exe");  
            target_result = readlink(exe_link, 
                target_name, sizeof(target_name)-1); 
            
            if (target_result > 0) 
            {
                target_name[target_result] = 0;
                if (strstr(target_name, app_name) != NULL)
                {                            
                    result = atoi(dir_entry_p->d_name);
                    //printf("getProcessID(%s) :Found. id = %d\n", app_name, result);
                    closedir(dir_p);
                    return result;
                }
            }
        }
    }
    closedir(dir_p);
    return result;
}

int main(int argc, char *argv[])
{
    printf("smbd id is %d\n", get_process_id_fun("smbd"));
    return 0;
}



Result:
smbd id is 3895415

沒有留言:

張貼留言