Si Usted
lista el contenido del directorio /proc
, verá
muchos directorios cuyo nombre es un número. Estos son los
directorios que contienen información sobre todos los procesos que
están corriendo en el sistema en ese momento:
$ ls -d /proc/[0-9]* /proc/1/ /proc/302/ /proc/451/ /proc/496/ /proc/556/ /proc/633/ /proc/127/ /proc/317/ /proc/452/ /proc/497/ /proc/557/ /proc/718/ /proc/2/ /proc/339/ /proc/453/ /proc/5/ /proc/558/ /proc/755/ /proc/250/ /proc/385/ /proc/454/ /proc/501/ /proc/559/ /proc/760/ /proc/260/ /proc/4/ /proc/455/ /proc/504/ /proc/565/ /proc/761/ /proc/275/ /proc/402/ /proc/463/ /proc/505/ /proc/569/ /proc/769/ /proc/290/ /proc/433/ /proc/487/ /proc/509/ /proc/594/ /proc/774/ /proc/3/ /proc/450/ /proc/491/ /proc/554/ /proc/595/
Note que como usuario no
privilegiado, Usted (lógicamente) sólo puede mostrar la información
relacionada con sus propios procesos, pero no con los de los otros
usuarios. Entonces, conéctese como root
y vea que información
está disponible acerca del proceso 1, que es el proceso
init y es el responsable de iniciar
todos los demás procesos:
$ su Password: # cd /proc/1 # ls -l total 0 -r-------- 1 root root 0 Aug 15 18:14 auxv -r--r--r-- 1 root root 0 Aug 15 18:14 cmdline lrwxrwxrwx 1 root root 0 Aug 15 18:14 cwd -> // -r-------- 1 root root 0 Aug 15 18:14 environ lrwxrwxrwx 1 root root 0 Aug 15 18:14 exe -> /sbin/init* dr-x------ 2 root root 0 Aug 15 18:14 fd/ -rw-r--r-- 1 root root 0 Aug 15 18:14 loginuid -r--r--r-- 1 root root 0 Aug 15 18:14 maps -rw------- 1 root root 0 Aug 15 18:14 mem -r--r--r-- 1 root root 0 Aug 15 18:14 mounts -rw-r--r-- 1 root root 0 Aug 15 18:14 oom_adj -r--r--r-- 1 root root 0 Aug 15 18:14 oom_score lrwxrwxrwx 1 root root 0 Aug 15 18:14 root -> // -rw------- 1 root root 0 Aug 15 18:14 seccomp -r--r--r-- 1 root root 0 Aug 15 18:14 stat -r--r--r-- 1 root root 0 Aug 15 18:14 statm -r--r--r-- 1 root root 0 Aug 15 18:14 status dr-xr-xr-x 3 root root 0 Aug 15 18:14 task/ -r--r--r-- 1 root root 0 Aug 15 18:14 wchan #
Cada directorio contiene las mismas entradas. Aquí tiene una descripción breve de algunas de ellas:
cmdline
: este
(pseudo-)archivo contiene toda la línea de comandos usada para
invocar al proceso. No tiene formato: no hay un espacio entre el
programa y sus argumentos, y tampoco hay un salto de línea al
final. Para poder verlo, puede usar: perl -ple 's,\00, ,g' cmdline.
cwd
: este vínculo
simbólico apunta al directorio de trabajo corriente
(“current working directory” en inglés, de allí el
nombre) del proceso.
environ
:
este archivo contiene todas las variables de entorno definidas
por este proceso, de la forma VARIABLE=valor
. Al
igual que con cmdline
, la salida no tiene
formato alguno: no hay saltos de línea para separar las
diferentes variables, y tampoco al final. Una solución para
verlo:perl -ple 's,\00,\n,g' environ.
exe
: este es un vínculo
simbólico que apunta al archivo ejecutable correspondiente al
proceso en curso de ejecución.
fd
: este subdirectorio
contiene la lista de los “descriptores” de archivo
abiertos actualmente por el proceso. Vea abajo.
maps
: cuando Usted
muestra el contenido de esta tubería nombrada (por ejemplo, con
cat), puede ver las partes del espacio de
direccionamiento del proceso que en ese momento están proyectadas
sobre un archivo. Los campos, de izquierda a derecha, son: el
espacio de direccionamiento asociado a esta proyección, los
permisos asociados a esta proyección, el desplazamiento desde el
comienzo del archivo donde comienza la proyección, el dispositivo
en el cual se encuentra el archivo proyectado, el número de
i-nodo del archivo, y finalmente el nombre del archivo en sí
mismo. Consulte mmap(2).
root
:
este es un vínculo simbólico que apunta al directorio raíz usado
por el proceso. Generalmente, será /
, pero
consulte chroot(2).
status
: este archivo contiene
información diversa sobre el proceso: el nombre del ejecutable,
su estado corriente su PID y su PPID, sus UID y GID
reales y efectivos, su uso de memoria, y otra información. Note
que los archivos stat
y
statm
ahora son obsoletos. La información
que contenían ahora se almacena en
status
.
Si listamos el contenido
del directorio fd
, para un proceso al azar,
obtenemos lo siguiente:
# ls -l /proc/8141/fd/ total 4 lrwx------ 1 peter peter 64 ago 4 09:05 0 -> /dev/tty1 lrwx------ 1 peter peter 64 ago 4 09:05 1 -> /dev/tty1 lrwx------ 1 peter peter 64 ago 4 09:05 2 -> /dev/tty1 l-wx------ 1 peter peter 64 ago 4 09:05 3 -> /home/peter/seti32/lock.sah #
De hecho, esta es la lista de los descriptores de archivo que abrió el proceso. Cada descriptor abierto está materializado por un vínculo simbólico cuyo nombre es el número del descriptor, y que apunta al archivo abierto por este descriptor[9]. También puede notar los permisos sobre los vínculos simbólicos: este es el único lugar donde los derechos tienen sentido, ya que representan los permisos con los cuales se abrió el archivo correspondiente al descriptor.
[9] Si
recuerda lo que se mencionó en la sección Sección 4, “Redirecciones y tuberías”, sabrá el significado de los descriptores
0
, 1
y
2
. El descriptor 0
es la
entrada estándar, el descriptor 1
es la salida
estándar y el descriptor 2
es el error
estándar.