Si tenemos que definir los procesos, podriamos hacerlo asi:
Un proceso es cada una de las instancias de un programa que se estan ejecutando en un momento dado. 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 ejecutando sus operaciones, dando la sensación de una ejecución paralela.
Hemos comentado antes que Linux es un sistema multiusuario y multitarea, por lo que en cualquier momento, en la maquina podrán estar corriendo «n» procesos de «n» usuarios distintos
El kernel de Linux, mantiene una tabla interna, conocida como tabla de procesos en la que mantiene informacion acerca de todos los procesos que estan corriendo.
Vamos a aprovechar una variable de la shell ($$) que muestra el identificador de proceso (PID) de la shell, y con el comando echo $$ vamos a visualizarlo
$ echo $$
nos responderá con un numero que es el PID del proceso de esta shell
Los procesos en GNU/Linux son organizados de forma jerárquica, cada proceso es lanzado por un proceso padre y es denominado proceso hijo. De está forma, todos los procesos en GNU/Linux son hijos de init (PID=1)ya que este es el primer proceso que se ejecuta al iniciar el ordenador y init es padre de todos los procesos. Si se mata al proceso padre, también desaparecerán los procesos hijos.
Basicamente, hay dos tipos de procesos:
– Los procesos de usuario son los programas que utiliza el usuario generalmente y se encuentran conectados a una terminal. El programa aparecerá el pantalla y interactuara con el usuario
– Los demonios por contra, no están conectados a una terminal, funcionan solos y no interactúan con el usuario.
Un proceso se iniciara cuando el sistema o el usuario lo llame, y estara corriendo hasta que el programa decida finalizar por haber acabado su trabajo, el usuario le ordene terminar, u otro proceso le envie la señal correspondiente de finalizacion
Desde el primer momento que un usuario se identifica ante unsistema Linux, se inicia el proceso de la shell que sera el padre de todos los procesos que el usuario vaya lanzando. Esta shell posee un entorno en donde se establecen las variable como el PATH, el UID, el GID, y todas aquellas que se vayan definiendo.
Cuando un usuario lanza un proceso, este adquiere los permisos correspondientes al usuario que lo ha lanzado, y sus variables de entorno, le sera asignado un PID y tendra como PPID el correspondiente al shell que lo lanzó. COn todo esto, sera mas facil identificar cada columna de la tabla de proceso
Cuando queremos ver una lista de los procesos en ejecucion, podemos utilizar el comando ps
$ ps aux
– USER: usuario que lanzo el proceso
– PID: Numero ID del proceso en cuestión. Este numero es necesario para matar luego al proceso
– %CPU Tiempo de cpu utilizado por el proceso en tanto por ciento sobre el total
– %MEM Memoria asignada al proceso en tanto por ciento sobre el total
– VSZ (Virtual Memory Size) Evaluación del tamaño de la memoria virtual que puede consumir
– RSS (Resident Set Size) Tamaño de memoria virtual en uso por este proceso
– TTY: Esta columna muestra en que terminal se está ejecutando el proceso, si aparece con un ? significa que es un demonio (todos los procesos listados en la imagen son demonios, para los más observadores se habrán dado cuenta de que hay más procesos en ejecución, solo que no me entran en una imagen)
– STAT: Está columna muestra el estado del proceso
– START: Hora de inicio del proceso
– TIME: Está columna muestra el tiempo que ha consumido el proceso para ser lanzado, es decir, el tiempo que ha estado activo.
– COMMAND: Está columna muestra el comando que fue necesario para invocar al proceso en cuestión
El comando que hemos utilizado para la visualizacion a empleado las opciones
- a Todos los procesos de un terminal
- x todos los procesos
- u información ampliada (orientada al usuario)
Jerarquia de procesos
Hemos dicho que todos los procesos cuelgan del proceso que lo lanzo, por lo que hay un comando que nos muestra la estructura de los procesos corriendo, en forma de arbol; este comando es
$ pstree
Podéis utilizar el man para ver las opciones disponibles.