Capítulo 9. El sistema de archivos /proc

Tabla de contenidos
9.1. Información sobre los procesos
9.2. Información sobre el hardware
9.3. El subdirectorio /proc/sys

El sistema de archivos /proc es algo específico de GNU/Linux. El mismo es un sistema de archivos virtual, y como tal, no ocupa lugar en su disco. Es una forma muy conveniente de obtener información sobre el sistema, ya que la mayoría de los archivos de este directorio son legibles (bueno, con un poco de ayuda). De hecho, muchos programas obtienen información de los archivos de /proc, la formatean a su manera y luego la muestran. Este es el caso de todos los programas que muestran información sobre los procesos, y ya hemos visto algunos de ellos (top, ps y otros). /proc también es una buena fuente de información sobre su hardware, y similarmente, unos cuantos programas sólo son interfaces de la información contenida en /proc.

También hay un subdirectorio especial, /proc/sys. Este permite cambiar algunos parámetros del núcleo en tiempo real, o consultarlos.

9.1. Información sobre los procesos

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:

  1. 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.

  2. cwd: este vínculo simbólico apunta al directorio de trabajo corriente ("current working directory" en inglés, de allí el nombre) del proceso.

  3. 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.

  4. exe: este es un vínculo simbólico que apunta al archivo ejecutable correspondiente al proceso en curso de ejecución.

  5. fd: este subdirectorio contiene la lista de los "descriptores" de archivo abiertos actualmente por el proceso. Vea abajo.

  6. 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. Vea mmap(2).

  7. root: este es un vínculo simbólico que apunta al directorio raíz usado por el proceso. Generalmente, será /, pero vea chroot(2).

  8. 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.

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[1]. 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.

Notas

[1]

Si recuerda lo que se mencionó en la sección Redirecciones y tuberías, sabrá el significado de los descriptores 0, 1 y 2.


Tux sobre Estrella por MandrakeSoft Linux es una marca registrada de Linus Torvalds. Todas las otras marcas registradas y copyrights son la propiedad de sus respectivos dueños.
A menos que se diga lo contrario, todo el contenido de estas páginas y todas las imágenes tienen Copyright de MandrakeSoft S.A. y de MandrakeSoft Inc. 2002.
http://www.mandrakelinux.com/