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 &lt; ) { 
                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