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 dr-xr-xr-x 2 root root 0 Feb 15 18:14 attr/ -r-------- 1 root root 0 Feb 15 18:14 auxv -r--r--r-- 1 root root 0 Feb 15 18:14 cmdline lrwxrwxrwx 1 root root 0 Feb 15 18:14 cwd -> // -r-------- 1 root root 0 Feb 15 18:14 environ lrwxrwxrwx 1 root root 0 Feb 15 18:14 exe -> /sbin/init* dr-x------ 2 root root 0 Feb 15 18:14 fd/ -r--r--r-- 1 root root 0 Feb 15 18:14 maps -rw------- 1 root root 0 Feb 15 18:14 mem -r--r--r-- 1 root root 0 Feb 15 18:14 mounts lrwxrwxrwx 1 root root 0 Feb 15 18:14 root -> // -r--r--r-- 1 root root 0 Feb 15 18:14 stat -r--r--r-- 1 root root 0 Feb 15 18:14 statm -r--r--r-- 1 root root 0 Feb 15 18:14 status dr-xr-xr-x 3 root root 0 Feb 15 18:14 task/ -r--r--r-- 1 root root 0 Feb 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,
por ejemplo el proceso 127, obtenemos lo siguiente:
$ ls -l /proc/127/fd total 0 lrwx------ 1 root root 64 dic 16 22:04 0 -> /dev/console l-wx------ 1 root root 64 dic 16 22:04 1 -> pipe:[128] l-wx------ 1 root root 64 dic 16 22:04 2 -> pipe:[129] l-wx------ 1 root root 64 dic 16 22:04 21 -> pipe:[130] lrwx------ 1 root root 64 dic 16 22:04 3 -> /dev/apm_bios lr-x------ 1 root root 64 dic 16 22:04 7 -> pipe:[130] lrwx------ 1 root root 64 dic 16 22:04 9 -> /dev/console $
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[30]. 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.
[30] 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.