subrutina proc_getattr
Finalidad
Recupera los atributos seleccionados de un proceso.
Biblioteca
Biblioteca C estándar (libc.a)
Sintaxis
#include <sys/proc.h>
int proc_getattr (pid,attr,size)
pid_t pid;
procattr_t* attr;
size64_t size;Descripción
Las subrutinas proc_getattr le permiten recuperar el estado actual de determinados atributos de proceso. La información se devuelve en la estructura procattr_t definida en el archivo de cabecera <sys/proc.h> .
typedef struct {
uchar core_naming; /* Unique core file names */
uchar core_mmap; /* Dump nonanonymous mmap regions to core file */
uchar core_shm; /* Dump shared memory to core file */
uchar aixthread_hrt; /* High resolution timer for thread */
}procattr_t; Para obtener información sobre el proceso que llama, se puede pasar un -1 como primer argumento, pid.
El proceso A puede recuperar información de atributos de proceso sobre el proceso B si uno o varios de los elementos siguientes son verdaderos:
- El proceso A y el proceso B tienen el mismo ID de usuario real o efectivo.
- El proceso A ha sido ejecutado por el usuario root.
- El proceso A tiene el privilegio PV_DAC_R .
Parámetros
| Elemento | Descripción |
|---|---|
| idproceso | Ha especificado el identificador de proceso del proceso para el que se va a recuperar la información. |
| attr | Especifica el apointer a la estructura de usuario que contiene la información recuperada de la estructura de kernel de proceso. |
| tamaño | La estructura sizeof procattr_t se almacena en el parámetro size al llamar a la API. |
Valores de retorno
| Elemento | Descripción |
|---|---|
| 0 | proc_getattr ha sido satisfactorio. |
| -1 | proc_getattr no ha sido satisfactorio. La variable global errno se ha establecido para indicar el error. |
Códigos de error
| Elemento | Descripción |
|---|---|
| EINVAL | El argumento size no coincide con el tamaño de procattr_t en el kernel. |
| EFAULT | El valor de attr que se ha pasado al almacenamiento intermedio no es válido. |
| ESRCH | No se ha podido localizar el identificador de proceso. |
| EPERM | Los privilegios no son suficientes para leer atributos de la estructura proc de destino. |
Ejemplo
#include <stdio.h>
#include <sys/proc.h>
dispprocflags.c:
#define P(_x_) (((_x_) == PA_ENABLE) ? "ENABLE" : \
((_x_) == PA_DISABLE ? "DISABLE" : \
(((_x_) == PA_IGNORE) ? "IGNORE" : "JUNK")))
int main(int argc, char *argv[])
{
int rc;
procattr_t attr;
pid_t pid;
if (argc < ) {
printf("Syntax: %s <pid>\n", argv[0]);
exit(-1);
}
pid = atoi(argv[1]);
bzero(&attr, sizeof(procattr_t));
rc = proc_getattr(pid, &attr, sizeof(procattr_t));
if (rc) {
printf("proc_getattr failed, errno %d\n", errno);
exit(-1);
}
printf("core_naming %s\n", P(attr.core_naming));
printf("core_mmap %s\n", P(attr.core_mmap));
printf("core_shm %s\n", P(attr.core_shm));
printf("aixthread_hrt %s\n", P(attr.aixthread_hrt));
}
crash64.c:
#include <stdio.h>
int main()
{
int *p = (int *)0x100;
pid_t pid = getpid();
printf("My pid is %d\n", getpid());
getchar();
*p = 0x10;
printf("Done\n");
}
# ./crash64 & [2]
5570812
# My pid is 5570812
# ./dispcoreflags 5570812
PID 5500FC
core_naming ENABLE
core_mmap ENABLE
core_shm ENABLE
aixthread_hrt DISABLE
# fg ./crash64
Memory fault(coredump)
# ls core*
core.5570812.11054349