objective-c - temperatura - sintonizar pid prueba y error
Obtener el nombre de PID? (1)
La función mira el valor es la estructura proc_bsdshortinfo
. Está limitado a devolver una cadena de 16 bytes, o 15 caracteres legibles cuando se incluye el terminador nulo.
De sys/param.h
:
#define MAXCOMLEN 16 /* max command name remembered */
Desde 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*/
};
EDITAR: para evitar esto, obtenga el último componente de ruta:
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);
Estoy en OSX Mountain Lion y estoy tratando de recuperar el nombre de un proceso utilizando su PID.
El siguiente es el código que estoy usando:
pid_t pid = 10687;
char pathBuffer [PROC_PIDPATHINFO_MAXSIZE] = "";
char nameBuffer [256] = "";
int sizeOfVal = sizeof(nameBuffer);
proc_pidpath(pid, pathBuffer, sizeof(pathBuffer));
proc_name(pid, nameBuffer, sizeof(nameBuffer));
NSLog(@"Path: %s/n Name: %s/n", pathBuffer, nameBuffer);
El código anterior es capaz de recuperar el nombre correctamente, sin embargo, solo recupera los primeros 15 caracteres e "ignora" el resto. Tenga en cuenta que esto no es un problema para mostrar el nombre, sino para recuperarlo . El problema no está en el resto de mi aplicación, ya que estoy probando el código anterior en una aplicación independiente. También tenga en cuenta que traté de cambiar el PID, pero independientemente de qué PID intente, el código solo recupera los primeros 15 caracteres del nombre. La recuperación de ruta funciona perfectamente.
¿Alguien tiene alguna idea sobre lo que estoy haciendo mal?