Procesos

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
Línea 1: Línea 1:
:El hecho de que el sistema operativo sea multitarea implica que podemos lanzar más de un programa a la vez. Un [[proceso]] no es más que un programa o aplicación que se encuentra cargado en la memoria y en proceso de ejecución.  
+
:El hecho de que el sistema operativo sea multitarea implica que podemos lanzar más de un programa a la vez. Un proceso no es más que un programa o aplicación que se encuentra cargado en la memoria y en proceso de ejecución.  
 
:Aunque nuestro ordenador sólo disponga de una CPU, el sistema operativo se encarga de repartir el tiempo de procesamiento de la misma para que varios procesos puedan ir realizando sus operaciones, dando la sensación de que se es  tán ejecutando todos a la vez.                                                       
 
:Aunque nuestro ordenador sólo disponga de una CPU, el sistema operativo se encarga de repartir el tiempo de procesamiento de la misma para que varios procesos puedan ir realizando sus operaciones, dando la sensación de que se es  tán ejecutando todos a la vez.                                                       
 
:Para identificar de forma inequívoca cada proceso, el núcleo del sistema les asigna un número llamado PID (Process IDentification)
 
:Para identificar de forma inequívoca cada proceso, el núcleo del sistema les asigna un número llamado PID (Process IDentification)

Revisión de 16:10 12 mayo 2007

El hecho de que el sistema operativo sea multitarea implica que podemos lanzar más de un programa a la vez. Un proceso no es más que un programa o aplicación que se encuentra cargado en la memoria y en proceso de ejecución.
Aunque nuestro ordenador sólo disponga de una CPU, el sistema operativo se encarga de repartir el tiempo de procesamiento de la misma para que varios procesos puedan ir realizando sus operaciones, dando la sensación de que se es tán ejecutando todos a la vez.
Para identificar de forma inequívoca cada proceso, el núcleo del sistema les asigna un número llamado PID (Process IDentification)
Aunque podríamos pensar que con solo el nombre ya los podríamos referenciar, es imprescindible disponer de este número porque podemos ejecutar un mismo programa tantas veces como queramos, al mismo tiempo que se ejecutan diferentes instancias del mismo.
Para saber qué procesos se están ejecutando, podemos utilizar el comando ps. Para explorar un poco más todo este mecanismo de procesos, explicaremos con más detalle algunos de los parámetros que le podemos pasar a este comando:
  • “T”: esta opción viene por defecto y nos indica que sólo se mostrarán los procesos que se están ejecutando en el terminal dónde nos encontramos o que se hayan lanzando a partir de él.
  • “-a”: nos muestra los procesos de todos los terminales del sistema
  • “-A”: nos muestra todos los procesos del sistema. Si ejecutamos el comando, veremos que, aparte de los programas que los usuarios ejecutan, hay otros. Muchos de ellos ejecutan las funciones necesarias para que el operativo funcione correctamente, otros son los servidores de aplicaciones configurados, etc.
  • “-l”: enseña información extendida para cada proceso, como el tiempo de CPU que ha utilizado, el terminal donde se ejecuta, etc. En la segunda columna también podemos ver el estado del proceso. Aunque el sistema tenga muchos procesos ejecutándose en un mismo instante de tiempo, ello no implica que todos necesiten tiempo de CPU constantemente. Por ejemplo, cuando un servidor de páginas web no tiene ninguna petición, no es necesario que haga absolutamente ninguna operación. Aunque esté en memoria preparado para ejecutarse al recibir una petición, es mejor que no pase en ningún momento por la CPU, ya que ésta puede utilizarse para otros procesos que sí que la necesitan. Internamente, el sistema operativo tiene implementados una serie de mecanismos muy eficaces para gestionar toda esta clase de operaciones. De este modo, un proceso puede estar en los siguientes estados (mostrados con el carácter correspondiente):
  • “D”: proceso ininterrumpible. Este tipo de proceso generalmente suele pertenecer a la entrada/salida de algún dispositivo que se dañaría si dejara de ser atendido.
  • “R”: proceso que en el momento de ejecutar el comando también se está ejecutando, o sea, todos aquellos que están en cola de ejecución. La cola de ejecución de procesos es donde se ponen todos aquellos que se van repartiendo el tiempo de la CPU.
  • “S”: proceso dormido o esperando que ocurra algún tipo de evento para que el sistema lo despierte y lo ponga en la cola de ejecución.
  • “T”: proceso que ha sido detenido por el usuario o el sistema.
  • “Z”: proceso zombie. Este estado indica que el proceso ha tenido algún fallo y no funciona correctamente. Generalmente es mejor eliminar este tipo de procesos.
Otro comando muy útil es el top, o mejor aún, htop, que nos informa de forma interactiva de los procesos del sistema, del estado de utilización de la CPU, la memoria utilizada y libre, la RAM que utiliza cada proceso, etc.Este programa es muy indicado cuando el sistema no responde adecuadamente o notamos alguna disfunción extraña, ya que nos permite localizar rápidamente qué proceso está afectando negativamente al rendimiento del sistema.
Como vemos, el sistema nos informa sobre todos los aspectos posibles de los procesos del sistema. Además de esto, podemos enviar ciertas señales a los procesos para informarles de algún evento, podemos sacarlos de la cola de ejecución, eliminarlos, darles más prioridad, etc. Saber manipular también es muy importante, ya que nos permitirá utilizar nuestro ordenador de forma más eficiente. Por ejemplo, si somos administradores de un centro de cálculo donde la mayoría de aplicaciones que se ejecutan necesitan mucho tiempo de CPU, podríamos configurar el sistema para hacer que los más urgentes se ejecuten con más prioridad que otros y acaben primero. El comando kill nos permite enviar señales a los procesos que nos interese. En general, todos los programas se diseñan para que puedan recibir este tipo de señales. De este modo, según el tipo de señal recibido saben que deben realizar unas operaciones u otras. Hay muchos tipos diferentes de señales, que podemos ver en el manual de kill, aunque las más utilizadas son las que nos sirven para obligar a un proceso a que termine o pause su ejecución. Con la señal TERM (“kill -15 PID”), le indicamos al proceso que queremos que termine, de modo que al recibir la señal deberá guardar todo lo necesario y acabar su ejecución. Si hay algún tipo de problema o el programa no está preparado para recibir este tipo de señal, podemos utilizar KILL (“kill -9 PID”), que automáticamente lo expulsa de la cola de ejecución.killall sirve para referirnos al nombre de varios procesos a la vez en lugar de referenciarlos por su PID y, de esta forma, enviarles una señal a todos a la vez. Con el comando skill también podemos enviar señales a los procesos, pero con una sintaxis diferente. Por ejemplo, si queremos detener todas las ejecuciones de un determinado usuario, podríamos utilizar “skill -STOP -u nombreLogin”, con lo que todos los procesos de dicho usuario se pararían. Para reiniciarlos de nuevo, podríamos pasar la señal de CONT. Cuando estamos ejecutando algún programa en una consola y que remos pasarle la señal de TERM, podemos utilizar la combinación de teclas CTRL+C. Con CTRL+Z podemos pausar un programa y revivirlo con fg.
Otra manera de ver los procesos es por su jerarquía. Igual que en el sistema de ficheros, los procesos siguen una cierta jerarquía de padres a hijos. Todo proceso debe ser lanzado a partir de otro, sea el propio intérprete de comandos, el entorno gráfico, etc., de manera que se crea una relación de padres a hijos. Con el comando pstree podemos ver esta jerarquía de forma gráfica. Si lo ejecutamos, veremos cómo el padre de todos los procesos es uno llamado init. A partir de éste parten todos los demás, que a la vez pueden tener más hijos. Esta estructura jerárquica es muy útil, ya que, por ejemplo, matando a un proceso padre que contiene muchos otros hijos, también matamos a todos sus hijos. También nos puede servir para identificar de dónde parten ciertos procesos, etc. Si no le pasamos ningún parámetro al comando, por defecto compacta todos los procesos con un mismo nombre para no mostrar una estructura demasiado grande, aunque esto también es configurable a partir de sus parámetros.
Todos los procesos del sistema tienen una cierta prioridad. Como decíamos antes, esta prioridad indica el tiempo de CPU que se le dejará al proceso. Cuanto más prioritario sea el proceso, más tiempo de ejecución tendrá respecto a los otros. El rango de prioridades va desde el –20 al 19, de mayor a menor. Para lanzar un proceso con una determinada prioridad, podemos utilizar el comando nice. Si queremos dar una prioridad diferente a un proceso que ya esté en ejecución, podemos utilizar renice. Sólo el root puede utilizar el rango de prioridades negativas; así, el sistema se asegura de que el root cuente siempre con la posibilidad de ejecutar procesos más rápidamente que los usuarios. Por defecto, la prioridad con que se ejecutan los programas es la 0. Un aspecto que habrá que considerar es que con todo este mecanismo de prioridades no podemos medir el tiempo de ejecución real de un proceso porque la CPU se reparte entre todos los que tengamos en la cola de ejecución. En centros de cálculo donde se factura según el tiempo de utilización de las máquinas, es muy importante poder medir adecuadamente este aspecto. Por este motivo, el sistema nos proporciona el comando time, el cual, al pasarle el programa que queremos medir, nos devuelve el tiempo real de CPU que ha utilizado.
Herramientas personales