Get name from PID? Get name from PID? unix unix

Get name from PID?


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