You are on page 1of 5

Actividad 12: Procesos en linux. Estado de un proceso. Ejecucin en primer y segundo plano.

Procesos en LINUX ----------------El intrprete de comandos tiene como misin atender las rdenes lanzadas por el usuario sobre la consola, aunque tambin se encarga del CONTROL DE TAREAS; Trabajo consistente en gestionar la correcta ejecucin de todos los comandos y programas que acontecen en cada instante. Cuando un usuario ejecuta un programa, lanza lo que se conoce como proceso, que es simplemente el nombre que se da a un programa que se est ejecutando. El comando 'ps' visualiza la lista de procesos activos actualmente. Por ejemplo: #ps PID 1 2 3 4 5 6 30 31 32 22 33 # El significado de cada columna es: - Columna "PID" representa el identificador del proceso. - Columna "Uid" seala el usuario (uid -identificador de usuario-) que lanz el proceso. - Columna "Size" tamao del proceso. - Columna "State" informa del estado de un proceso. Los valores posibles son: - R (Runnable): En ejecucin. - S (Sleeping): Durmiendo. Espera un suceso del sistema. - T (Traced Stopped): Detenido. Est parado por una seal indicada por el proceso que lo llam (proceso padre) generalmente el intrprete de comandos por orden del usuario. - Columna "Command" contiene el nombre del proceso que se est ejecutando. Estados de un proceso --------------------Durante la ejecucin de un proceso este puede pasar por diferentes estados. El estado de un proceso define cual es su actividad en un momento determinado. A continuacin se muestran tres posibles situaciones: A) Ejecucin normal de un proceso. TTY Uid root root root root root root root root root root root Size 620 0 0 0 0 0 620 496 496 612 608 State S S S S S S S S S T R Command init [keventd] [ksoftirqd_CPU0] [kswapd] [bdflush] [kupdated] -sh /sbin/getty 38400 tty2 /sbin/getty 38400 tty3 vi ps

tty1 tty2 tty3 tty1 tty1

llamada al proceso --> Ejecucin --> Fin (R) Ejemplo: #date Sun Oct 24 18:16:27 UTC 2004 #_ B) Detencin de un proceso. llamada --> Run --> [Seal de stop] ... ... --> Run --> Fin (R) | ^ (R) | | v | Parada ...[activar] --+ (T) Ejemplo: #vi fichero_usuario ... pantalla del editor ... <Ctrl>+<Z> %1 Stopped # ... #bg ... pantalla del editor ... # <-- Llamada al proceso <-- Ejecucin <-- Parada del proceso <-<-<-<-Otros proceso Activa el proceso detenido Ejecucin Fin del proceso, el sistema espera nueva orden <-- Llamada al proceso <-- Ejecucin <-- Fin del proceso, el sistema espera nueva orden

C) Proceso durmiente. llamada --> Ejecucin --> Espera ... [ ] --> Ejecucin --> Fin (R) (S) ^ (R) | | Evento Ejemplo: En el caso de proceso en estado durmiente el evento esperado es una seal entregada por el Sistema Operativo. Ver con el comando 'ps' como las consolas virtuales tty2 y tty3 son procesos en esta situacin a la espera de ser activadas. El usuario puede forzar el estado de un proceso manejando los comandos y opciones del intrprete de comandos siguientes: - Ver el estado de las tareas en segundo plano y detenidas por el usuario con el comando 'jobs'. Por ejemplo: #jobs [1] 52 yes > /dev/null [2] 53 Stopped vi fichero_2 ^ ^ ^ ^ | | | | | | | +--- Tarea | | | | | +--- Estado de la tarea

| | | +--- Nmero de identificacin del proceso (PID) cuando se | lanz +--- Nmero de tarea en situacin de parada o ejecucin en segundo plano - Detener un proceso, pulsado la combinacin de teclas <Ctrl>+<Z>. Por ejemplo: #vi fichero_2 ... pantalla editor ... <Ctrl>+<Z> %1 Stopped ... #fg (el editor vi retorna a estado de ejecucin) nota: Mientras un proceso est "durmiendo" no se ejecuta y por tanto no consume CPU. - Forzar la finalizacin de un proceso, usando la combinacin de teclas <Ctrl>+<C>: #yes > /dev/null <-- el programa "yes" lanza el mensaje por consola "y" en un bucle infinito (la salida est redireccionada al dispositivo <Ctrl>+<C> nulo -equivale a la papelera en windows-) # Nota: La combinacin <Ctrl>+<C> es efectiva sobre procesos en primer plano. - Eliminar un proceso por medio del comando 'kill'. Admite como parmetros: El n de tarea (segn 'jobs') precedido por "%" Ejemplo: #kill %1 El n identificador de proceso (PID) Ejemplo: #kill 40 Ejecucin en primer y segundo plano ----------------------------------Ya se ha comentado la capacidad multitarea (varias acciones realizadas a la vez) de todo sistema LINUX. Pero cmo conseguir esto si nicamente es posible interactuar con una tarea en un instante determinado?. Los conceptos primer y segundo plano describen esta situacin. Decimos que un proceso est en primer plano cuando es accesible desde la consola mientras que el resto de procesos activos estn ejecutndose fuera de ella, es decir, en segundo plano. El Sistema Operativo proporciona herramientas con las que trasladar manualmente un proceso en ejecucin de primer a segundo plano y viceversa, es decir, el usuario puede elegir de entre los procesos activos aquel con el que desea interactuar. El comando 'fg' (ForeGround) pasa a primer plano una tarea suspendida o en segundo plano. Sin argumentos, selecciona la tarea suspendida ms recientemente. La seleccin de una tarea particular, suspendida o en segundo plano, (ver las tareas con el comando 'jobs') se hace con el nmero de tarea precedido del signo de tanto por ciento "%".

Ejemplos: #fg <-- Pasa la tarea suspendida a primer plano. #fg %2 <-- Lleva a primer plano la tarea 2 (segn 'jobs'). Una tarea suspendida es puesta en ejecucin en segundo plano utilizando el comando 'bg' (BackGround). Sin argumentos, 'bg' opera con la tarea que fue suspendida ms recientemente. Puede especificarse una tarea determinada (ver las tareas con el comando 'jobs'), aportando el nmero de tarea precedido del signo de tanto por ciento "%". Ejemplos: #bg <-- Pone en ejecucin en segundo plano la ltima tarea suspendida #bg %2<-- Pasa la tarea 2 a ejecucin en segundo plano (segn 'jobs') En LINUX tambin es posible iniciar un programa directamente en segundo plano, escribiendo el signo "&" (en ingls "ampersand") al final de la lnea de rdenes durante la llamada a la tarea. Por ejemplo: #vi mi_fichero & T A R E A S ----------1 Ejecutar las tres rdenes siguientes en primer plano y psalas a estado suspendido: #yes <Ctrl>+<Z> #yes bucle infinito 2 <Ctrl>+<Z> #yes bucle infinito 3 <Ctrl>+<Z> 2 Estudiar el estado de las tareas con el comando 'jobs'. 3 Eliminar el proceso que fue lanzado con la orden "#yes". 4 Qu sucede si ahora deseo pasar a primer plano el proceso eliminado en el punto anterior?. Intntalo con "#kill %1". 5 Revisa el estado de las tareas ('jobs'). 6 Puesto que los bucles infinitos 2 y 3 se ejecutan en segundo plano intenta terminarlos (<Ctrl>+<C>). 7 Visto que es imposible, pasar el bucle infinito 2 a primer plano y repetir el punto anterior. 8 Lanza un bucle infinito (4) directamente a segundo plano redireccionando los mensajes de salida a nulo: #yes bucle infinito 4 > /dev/null & 9 Comprueba el estado de los procesos. 10 Elimina todas las tareas suspendidas o ejecutadas en segundo plano: kill %a %b ... %x (a,b,..,x segn 'jobs'). <-- Lanza el editor "vi" en segundo plano.

<->

You might also like