next up previous
Next: El control de procesos Up: Los procesos en UNIX Previous: Evolución de un proceso

Generación de los procesos del sistema

Mediante la descripción dada en el apartado Evolución de un proceso, queda explicada la genealogía de procesos en UNIX. Tan solo falta un pequeño detalle: > cómo ha nacido el intérprete de comandos ?. La explicación está en la figura 1.4. Cuando la computadora arranca el sistema operativo, se ejecuta el fichero ejecutable kernel cuya misión es cargar el núcleo del sistema operativo en memoria. El núcleo es el primer proceso del sistema, y es padre de si mismo, puesto que su PID=PPID=0. La misión del núcleo es controlar los recursos de la computadora, por lo que delega el nacimiento de nuevos procesos en uno de sus hijos: init. Para cada uno de los terminales datos de alta en el ordenador y que es ese instante están usándose (tienen un usuario golpeando sus teclas) init crea un proceso hijo en el que se ejecuta el programa getty que solicita la conexión. Cuando ésta se obtiene, el mismo proceso se transforma en el programa login que solicita el nombre de usuario y la contraseña (si esta fue establecida). Si ambas informaciones son correctas, este proceso se convierte en el intérprete de comandos.


  
Figura: Ejemplo sobre la creación de procesos.
\begin{figure}\centerline{\epsfig{figure=basico/genealogia.eps,width=8 cm}}
\end{figure}

Mediante el comando ps puede comprobarse la genealogía de los procesos del sistema. Los parámetros cambian dependiendo de la versión de UNIX. Por ejemplo en Linux, para obtener la genealogía de nuestros procesos podemos escribir:



width 3pt
width .3pt415ptbash# ps -xfl
 F    UID   PID  PPID PRI NI SIZE  RSS WCHAN     STAT TTY   TIME COMMAND
  0     0     1     0   1  0   44   84 1161df     S     ?    0:01 init
  0     0     6     1   1  0   32   52 1164d6     S     ?    0:00 (update)
  0     0     7     1   1  0   32   80 10ff90     S     ?    0:00 update(bdflush)
  0     0    21     1   1  0   60  172 10ff90     S     ?    0:04 /usr/sbin/crond -l10
  0     0    37     1   1  0   69  140 130b5d     S     ?    0:01 /usr/sbin/syslogd
  0     0    39     1   1  0   44   96 1164d6     S     ?    0:00 /usr/sbin/klogd
  0     0    41     1   1  0   72   88 130b5d     S     ?    0:00 /usr/sbin/inetd
  0     0   932    41   9  0   46  252 130b5d     S     ?    0:00  \_ in.rlogind
  0   999   933   932   1  0  386  540 10ff90     S    pp0   0:01      \_ -csh
  0     0   965   933   5  0  381  516 11b8a8     S    pp0   0:00          \_ bash
  0     0   987   965  28  0   65  196 0          R    pp0   0:00             \_ ps -xfl
  0     0    43     1   1  0   64    0 130b5d     SW    ?    0:00 (lpd)
  0     0    50     1   1  0  251  184 1164d6     S     ?    0:01 sendmail: accepting connections
  0     0    59     1   1  0   41    0 1a3dd7     SW   v04   0:00 (agetty)
  0     0    60     1   1  0   41    0 1a3dd7     SW   v05   0:00 (agetty)
  0     0    61     1   1  0   41    0 1a3dd7     SW   v06   0:00 (agetty)
  0     0   130     1   1  0   41    0 1a3dd7     SW   v03   0:00 (agetty)
  0     0   500     1   1  0   41  108 1a3dd7     S    v02   0:00 /sbin/agetty 38400 tty2
  0   999   691     1   1  0 1117 1880 130b5d     S     ?    1:14 xfig
  0     0   708     1   1  0   41  220 1a3dd7     S    v01   0:00 /sbin/agetty 38400 tty1
bash#
width .3pt
depth .3pt width -3pt

Para conocer el significado de cada columna lo más recomendable es hacer man ps y leer con tranquildad las especificaciones de ese sistema operativo.


next up previous
Next: El control de procesos Up: Los procesos en UNIX Previous: Evolución de un proceso
Vicente González Ruiz
1998-07-13