Guía de seguimiento dinámico de Solaris

Argumentos

Los tipos de argumento de los sondeos proc se encuentran en la Tabla 25–2. Los argumentos se describen en la Tabla 25–1.

Tabla 25–2 Argumentos del sondeo proc

Sondeo 

args[0]

args[1]

args[2]

create

psinfo_t *

— 

— 

exec

char *

— 

— 

exec-failure

int

— 

— 

exit

int

— 

— 

fault

int

siginfo_t *

— 

lwp-create

lwpsinfo_t *

psinfo_t *

— 

lwp-start

— 

— 

— 

lwp-exit

— 

— 

— 

signal-discard

lwpsinfo_t *

psinfo_t *

int

signal-discard

lwpsinfo_t *

psinfo_t *

int

signal-send

lwpsinfo_t *

psinfo_t *

int

signal-handle

int

siginfo_t *

void (*)(void)

signal-clear

int

— 

— 

start

— 

— 

— 

lwpsinfo_t

Varios sondeos proc cuentan con argumentos del tipo lwpsinfo_t, estructura que se documenta en proc(4). La definición de la estructura lwpsinfo_t, tal y como se pone a disposición de los consumidores DTrace es la siguiente:

typedef struct lwpsinfo {
	int pr_flag;              /* flags; see below */
	id_t pr_lwpid;            /* LWP id */
	uintptr_t pr_addr;        /* internal address of thread */
	uintptr_t pr_wchan;       /* wait addr for sleeping thread */
	char pr_stype;            /* synchronization event type */
	char pr_state;            /* numeric thread state */
	char pr_sname;            /* printable character for pr_state */
	char pr_nice;             /* nice for cpu usage */
	short pr_syscall;         /* system call number (if in syscall) */
	int pr_pri;               /* priority, high value = high priority */
	char pr_clname[PRCLSZ];   /* scheduling class name */
	processorid_t pr_onpro;   /* processor which last ran this thread */
	processorid_t pr_bindpro; /* processor to which thread is bound */
	psetid_t pr_bindpset;     /* processor set to which thread is bound */
} lwpsinfo_t;

El campo pr_flag es un indicador de retención de máscara de bits que describe el proceso. Estos indicadores y su significado se describen en la Tabla 25–3.

Tabla 25–3 Valores pr_flag

PR_ISSYS

El proceso es un proceso del sistema. 

PR_VFORKP

El proceso es el proceso principal de un secundario vfork(2)'d.

PR_FORK

El proceso tiene establecido el modo inherit-on-fork. 

PR_RLC

El proceso tiene establecido el modo run-on-last-close. 

PR_KLC

El proceso tiene establecido el modo kill-on-last-close. 

PR_ASYNC

El proceso tiene establecido el modo asynchronous-stop. 

PR_MSACCT

El proceso tiene habilitado la contabilidad de microestado. 

PR_MSFORK

El registro de microestado del proceso se hereda en la bifurcación. 

PR_BPTADJ

El proceso tiene establecido el modo de ajuste del punto de interrupción. 

PR_PTRACE

El proceso tiene establecido el modo de compatibilidad con ptrace(3C).

PR_STOPPED

El subproceso es un LWP que se encuentra detenido. 

PR_ISTOP

El subproceso es un LWP detenido en un evento de interés. 

PR_DSTOP

El subproceso es un LWP que tiene efectiva una directiva de detención. 

PR_STEP

El subproceso es un LWP que tiene efectiva una directiva de paso único. 

PR_ASLEEP

El subproceso es un LWP en inactividad no interrumpible dentro de una llamada de sistema. 

PR_DETACH

El subproceso es un LWP desasociado. Consulte pthread_create(3C) y pthread_join(3C).

PR_DAEMON

El subproceso es un LWP daemon. Consulte pthread_create(3C).

PR_AGENT

El subproceso es el LWP agente para el proceso. 

PR_IDLE

El subproceso es el subproceso inactivo de una CPU. Los subprocesos inactivos sólo se ejecutan en una CPU cuando las colas de ejecución de la CPU están vacías. 

El campo pr_addr es la dirección de una estructura de datos privada y del núcleo que representa el subproceso. Aunque la estructura de datos es privada, el campo pr_addr podría utilizarse como un símbolo único para un proceso durante el tiempo que dure el subproceso.

El campo pr_wchan está establecido cuando el subproceso se encuentra en inactividad en un objeto de sincronización. El significado del campo pr_wchan es privado para la implementación del núcleo, pero este campo puede utilizarse como un símbolo único para el objeto de sincronización.

El campo pr_stype se establece cuando el subproceso se encuentra inactivo sobre un objeto de sincronización. Los posibles valores del campo pr_stype se encuentran en la Tabla 25–4.

Tabla 25–4 Valores pr_stype

SOBJ_MUTEX

Objeto de sincronización de exclusión mutua del núcleo. Se utiliza para serializar el acceso a las regiones de datos compartidos del núcleo. Consulte el Capítulo 18Proveedor lockstat y mutex_init(9F) para obtener más información sobre los objetos de sincronización de exclusión mutua del núcleo.

SOBJ_RWLOCK

Objeto de sincronización lectores/escritor del núcleo. Se utiliza para sincronizar el acceso a los datos compartidos del núcleo que pueden permitir varias lecturas simultáneas o un único escritor. Consulte el Capítulo 18Proveedor lockstat y rwlock(9F) para obtener detalles acerca de los objetos de sincronización lectores/escritor del núcleo.

SOBJ_CV

Objeto de sincronización de variable de condición. Las variables de condición están diseñadas para esperar de forma indefinida hasta que alguna condición se convierta en true. Las variables de condición suelen utilizarse para sincronizarse por razones diferentes al acceso a una región de datos compartida, y son el mecanismo que suele usarse cuando un proceso realiza una espera indefinida inducida por un programa. POr ejemplo, bloqueos en poll(2), pause(2), wait(3C), etcétera.

SOBJ_SEMA

Objeto de sincronización semáforo. Objeto de sincronización de propósito general que – al igual que los objetos de variable de condición– no realiza el seguimiento de una noción de propiedad. Dado que la propiedad es necesaria para implementar la herencia de prioridad en el núcleo de Solaris, la falta de propiedad inherente en objetos de semáforo impide un uso más extenso. Consulte semaphore(9F) para obtener más información.

SOBJ_USER

Objeto de sincronización a nivel de usuario. Todo el bloqueo en objetos de sincronización a nivel de usuario se maneja con objetos de sincronización SOBJ_USER. Entre los objetos de sincronización de nivel de usuario se incluyen los objetos creados con mutex_init(3C), sema_init(3C), rwlock_init(3C), cond_init(3C) y sus equivalentes POSIX.

SOBJ_USER_PI

Objeto de sincronización a nivel de usuario que implementa la herencia de prioridad. Determinados objetos de sincronización a nivel de usuario que realizan seguimiento de la prioridad, además permiten realizar un seguimiento de la herencia de la prioridad. Por ejemplo, los objetos de exclusión mutua creados con pthread_mutex_init(3C), es posible que fueran creados con la intención de heredar la prioridad con pthread_mutexattr_setprotocol(3C).

SOBJ_SHUTTLE

Objeto de sincronización lanzadera. Los objetos lanzadera se utilizan para implementar puertas. Consulte door_create(3DOOR) para obtener más información. 

El campo pr_state se establece en uno de los valores de la Tabla 25–5. El campo pr_sname se define en un carácter correspondiente, mostrado en paréntesis en la misma tabla.

Tabla 25–5 Valores pr_state

SSLEEP (S)

El subproceso está inactivo. El sondeo sched:::sleep se activará inmediatamente antes de la transición de estado de un subproceso a SSLEEP.

SRUN (R)

El subproceso puede ejecutarse, pero no se encuentra actualmente en ejecución. El sondeo sched:::enqueue se activará inmediatamente antes de que el estado de un subproceso realice la transición a SRUN.

SZOMB (Z)

El subproceso es un LWP zombie. 

SSTOP (T)

El subproceso está detenido, bien a raíz de una directiva proc(4) explícita o de algún otro mecanismo de detención.

SIDL (I)

El subproceso es un estado intermedio durante la creación del proceso. 

SONPROC (O)

El subproceso está en ejecución en una CPU. El sondeo sched:::on-cpu se activará en el contexto del subproceso SONPROC escaso tiempo después de que el estado del subproceso realice la transición a SONPROC.

psinfo_t

Varios sondeos proc cuentan con un argumento del tipo psinfo_t, estructura que se documenta en proc(4). La definición de la estructura psinfo_t, tal y como se pone a disposición de los consumidores DTrace es la siguiente:

typedef struct psinfo {
	int     pr_nlwp;            /* number of active lwps in the process */
	pid_t   pr_pid;             /* unique process id */
	pid_t   pr_ppid;            /* process id of parent */
	pid_t   pr_pgid;            /* pid of process group leader */
	pid_t   pr_sid;             /* session id */
	uid_t   pr_uid;             /* real user id */
	uid_t   pr_euid;            /* effective user id */
	gid_t   pr_gid;             /* real group id */
	gid_t   pr_egid;            /* effective group id */
	uintptr_t pr_addr;          /* address of process */
	dev_t   pr_ttydev;          /* controlling tty device (or PRNODEV) */
	timestruc_t pr_start;       /* process start time, from the epoch */
	char    pr_fname[PRFNSZ];   /* name of execed file */
	char    pr_psargs[PRARGSZ]; /* initial characters of arg list */
	int     pr_argc;            /* initial argument count */
	uintptr_t pr_argv;          /* address of initial argument vector */
	uintptr_t pr_envp;          /* address of initial environment vector */
	char    pr_dmodel;          /* data model of the process */
	taskid_t pr_taskid;         /* task id */
	projid_t pr_projid;         /* project id */
	poolid_t pr_poolid;         /* pool id */
	zoneid_t pr_zoneid;         /* zone id */
} psinfo_t;

El campo pr_dmodel se establece en PR_MODEL_ILP32, para indicar un proceso de 32–bits, o en PR_MODEL_LP64, para indicar un proceso de 64–bits.