Get name from PID?

前端 未结 1 1881
闹比i
闹比i 2020-12-29 14:18

I am on OSX Mountain Lion and am trying to retrieve a processes\' name using its PID.

The following is the code I am using:

pid_t pid = 10687;
char p         


        
相关标签:
1条回答
  • 2020-12-29 14:50

    The function looks at the value is the struct proc_bsdshortinfo. It is limited to return a 16 byte string, or 15 readable characters when including the null terminator.

    From sys/param.h:

    #define MAXCOMLEN   16      /* max command name remembered */
    

    From sys/proc_info.h:

    struct proc_bsdshortinfo {
            uint32_t                pbsi_pid;       /* process id */
            uint32_t                pbsi_ppid;      /* process parent id */
            uint32_t                pbsi_pgid;      /* process perp id */
        uint32_t                pbsi_status;        /* p_stat value, SZOMB, SRUN, etc */
        char                    pbsi_comm[MAXCOMLEN];   /* upto 16 characters of process name */
        uint32_t                pbsi_flags;              /* 64bit; emulated etc */
            uid_t                   pbsi_uid;       /* current uid on process */
            gid_t                   pbsi_gid;       /* current gid on process */
            uid_t                   pbsi_ruid;      /* current ruid on process */
            gid_t                   pbsi_rgid;      /* current tgid on process */
            uid_t                   pbsi_svuid;     /* current svuid on process */
            gid_t                   pbsi_svgid;     /* current svgid on process */
            uint32_t                pbsi_rfu;       /* reserved for future use*/
    };
    

    EDIT: To get around this, get the last path component:

    pid_t pid = 3051;
    char pathBuffer [PROC_PIDPATHINFO_MAXSIZE];
    proc_pidpath(pid, pathBuffer, sizeof(pathBuffer));
    
    char nameBuffer[256];
    
    int position = strlen(pathBuffer);
    while(position >= 0 && pathBuffer[position] != '/')
    {
        position--;
    }
    
    strcpy(nameBuffer, pathBuffer + position + 1);
    
    printf("path: %s\n\nname:%s\n\n", pathBuffer, nameBuffer);
    
    0 讨论(0)
提交回复
热议问题