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, seamos root y veamos que información está disponible acerca del proceso 127:
$ su Password: $ cd /proc/127 $ ls -l total 0 -r--r--r-- 1 root root 0 dic 14 19:53 cmdline lrwx------ 1 root root 0 dic 14 19:53 cwd -> // -r-------- 1 root root 0 dic 14 19:53 environ lrwx------ 1 root root 0 dic 14 19:53 exe -> /usr/sbin/apmd* dr-x------ 2 root root 0 dic 14 19:53 fd/ pr--r--r-- 1 root root 0 dic 14 19:53 maps| -rw------- 1 root root 0 dic 14 19:53 mem lrwx------ 1 root root 0 dic 14 19:53 root -> // -r--r--r-- 1 root root 0 dic 14 19:53 stat -r--r--r-- 1 root root 0 dic 14 19:53 statm -r--r--r-- 1 root root 0 dic 14 19:53 status $ |
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, siempre para nuestro proceso 127, obtenemos lo siguiente:
$ ls -l 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[27]. 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.
[27] Si recuerda lo que se mencionó en la sección “Redirecciones y tuberías”, sabrá el significado de los descriptores 0, 1 y 2.