Está en la página 1de 13

GESTION DE PROCESOS Sistemas Operativos y Distribuidos 2011 DCIC-UNS Claudio Andrs Salamanca cas@cs.uns.edu.

ar

Objetivos
- Comprender los conceptos detrs de la gestin de procesos - Aprender la utilizacin de las herramientas mayormente utilizadas

Introduccin
La gestin de procesos incluye, entre otras cosas, - Monitorear procesos actuales - Ejecutar procesos en primer y segundo plano - Modificar el plano de ejecucin de un proceso - Ordenarlos segn varios parmetros - Enviar seales a los procesos - Eliminar procesos innecesarios para el sistema/usuario.

Proceso
Bsicamente, un proceso corresponde a una instancia de un programa en ejecucin. La shell que utilizamos para interactuar con el sistema tambin es un proceso. De hecho, la shell es un buen ejemplo para entender las relaciones de parentesco entre procesos. Cuando el proceso ha finalizado de realizar su tarea, retorna los resultados al proceso padre y finaliza su ejecucin. El proceso hijo puede necesitar invocar otro proceso donde delegar parte de la tarea, convirtindose a su vez, en el proceso padre del proceso recin invocado.

Parmetros de un proceso
Process ID : cada proceso tiene un nmero asociado que se asigna cuando es creado. Los process id son nmero entero nicos para todos los procesos del sistema User ID y Group ID : cada proceso tiene que tener asociado unos privilegios que limiten el acceso al sistema de archivos . Estos privilegios quedan determinado por el user id y group id Parent Process: Todo proceso es creado por otro proceso, el proceso padre (parent process). El primer proceso iniciado por el kernel en linux es el proceso init. ste es el padre de todos los procesos

Los comandos que se vern en esta prctica son: ps : listado de procesos bg : enviar proceso a segundo plano fg : enviar proceso a primer plano jobs: tareas kill : terminacin de procesos con PID nohup : permitir seguir ejecutando un proceso &: enviar a background top: listado de procesos en tiempo real pgrep: expresin regular y nos muestra el/los ID del proceso pkill: terminacion de proceso con nombre htop : similar a top

Demonios
De los diferentes procesos que pueden estar ejecutndose en un sistema GNU/Linux, esto es, procesos invocados por el usuario actual, procesos invocados por otros usuarios y procesos invocados por el sistema operativo, siendo estos ltimos los ms especiales. A un proceso que se ejecuta en segundo plano esperando por eventos y ofreciendo servicios tpicamente se lo conoce como demonio (daemon).

ps <opciones> Muestra la lista de procesos del sistema, y algunas de sus caractersticas: hora de inicio, uso de memoria, estado de ejecucin, propietario y otros detalles. Sin opciones lista los procesos creados por el usuario actual y asociados a la terminal

opciones: -e o ax : muestra todos los procesos -u <usuario>: muestra los procesos de dicho usuario -l : salida en formato extendido -k: ordena la salida por algn campo $ps ax La primera columna, marcada como PID, representa el identificador de proceso (Process ID, PID) La segunda columna indica la terminal asociada al proceso La tercera columna indica el porcentaje de tiempo de procesador que el proceso est usando La cuarta columna es el nombre del proceso (el nombre del comando). La primera lnea es siempre la shell sobre la que se ejecutan los procesos. A esta shell (de hecho al primer proceso del usuario) se le llama lder de sesin (session leader).

Alguna de la informacin que ofrece ps en su listado , por ejemplo: $ps aux %CPU y %MEM: porcentajes de uso de CPU y memoria VSZ: memoria virtual del proceso, en Kbytes RSS: tamao de la memoria residente (resident set size) en Kbytes STAT: estado del proceso: D R S T Z ininterrumpible sleep (I/O) ejecutandose o en la cola de ejecucin interrumpible sleep (esperando un evento) detenido proceso zombie

Tambin puede aparece otro cdigo acompaando al principal < N L s l + alta prioridad baja prioridad pginas bloquedas lider de sesin multithread proceso en foreground

top <opciones>
ste comando, no slo muestra los procesos actuales, sino que automticamente se va actualizando para mostrar los cambios acontecidos.. Opciones - i: ignora los proceso inactivos -d: especifica el ritmo de actualizacin Opciones interactivas z: cambia de color q: salir n: reducir listado f: ampliar informacin

Gestin de procesos en windows (task manager)

Resource Monitor

Software: process explorer

pstree <opciones> Este comando muestra la jerarqua de los procesos mediante una estructura de rbol. Si se especifica el PID de un proceso, el rbol empezar desde ese proceso, de lo contrario el rbol empezar por el proceso init (PID=1) y mostrar todos los procesos del sistema. Si se especifica un usuario vlido se mostrar la jerarqua de todos los procesos del usuario opciones: -p: incluye el PID de los procesos en el rbol -a: incluye en el rbol la lnea de comando que se uso para iniciar el proceso

Finalizando un proceso
Bajo circunstancias normales, un proceso hijo acta bajo el padre que lo ha creado. Cuando el proceso hijo ya no es necesario, desaparece. Algunas veces, sin embargo, los procesos se convierten en procesos huerfanos, y aunque no sea necesario que se sigan ejecutando, continan su ejecucin consumiendo recursos innecesarios. -> Ejemplo huerfano.c Si el proceso hijo finaliza antes de que el proceso padre llame al wait () el proceso hijo se convierte en Zombie (defunct). -> Ejemplo zombie.c

huerfano.c
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main () { printf ("Ejemplo de proceso hurfano.\n"); printf ("Inicio del proceso padre. PID=%d\n", getpid ()); if (fork () == 0) /*Hijo*/ { printf ("Inicio proceso hijo. PID=%d, PPID=%d\n",getpid (), getppid ()); sleep (10); /*Duerme*/ printf ("El proceso queda hurfano. PID=%d PPID=%d\n",getpid (), getppid ()); } else /*Padre*/ printf ("Continuacin del padre. PID=%d\n", getpid ()); printf ("Fin del proceso %d\n", getpid ()); exit (0); /*Termina*/ #include<stdio.h> #include<stdlib.h> int main () { pid_t pid;

zombie.c

if ((pid = fork ()) < 0 ) exit (1); Else if (pid == 0) /*Hijo*/ exit (0); /*Termina*/ sleep (120); /*Duerme*/ exit(0); }

Cada proceso que se ejecuta en el sistema est alerta de los mensajes enviados por el kernel o por el usuario Las rdenes kill y killall se utilizan para enviar seales a un proceso stos mensajes (signals ) son nmeros enteros predefinidos y conocidos por los procesos $kill l - Lista el conjunto de seales

$kill <-s sigspec > PID


Sigspec SIGINT (2) : para el proceso y desaparece. Se enva con la secuencia Crtl-C SIGKILL (9): mata incondicionalmente e inmediatamente SIGTERM (15): terminar. Mata un proceso de forma controlada SIGCONT (18): cuando un proceso esta detenido y recibe dicha seal contina su ejecucin SIGSTOP (19): parar, pero preparado para continuar. Ctrl-Z

$killall <-s sigspec> nombre_proceso Esta orden es ligeramente diferente a la orden kill por dos motivos; en primer lugar utiliza el nombre de proceso en lugar del pid, y adems le enva la seal a todos los procesos que tengan el mismo nombre. Existen otras como $pkill <proceso> - Permite enviar seales a los procesos indicndolos por nombre en vez de por PID - Si hay varios procesos con el mismo nombre los mata a todos $xkill - permite cerrar aplicaciones y matar procesos con un solo clic

Segundo plano (background) y primer plano (foreground)


Cuando se ejecuta un proceso, por defecto se ejecuta en primer plano. Cuando un proceso se ejecuta en primer plano, se convierte en el nico trabajo en el que puede trabajar el usuario (con el que puede interactuar), la interaccin se basa entonces, en que se acabe ste trabajo. Por ejemplo, cuando un usuario ejecuta el comando ls -l, se mostrar por pantalla el resultado, y hasta que no acabe el comando, no se podr ejecutar ningn otro comando. Para ejecutar un proceso en segundo plano (background), simplemente se ha de aadir al final del comando el signo ampersand (&). El nmero que aparece entre corchetes es igual al nmero de trabajos que se tienen actualmente ejecutndose en segundo plano y nmero que le sigue es el nmero de proceso de ste trabajo.

10

Al poner al proceso a ejecutarse en segundo plano, se permite al usuario poder seguir trabajando e iniciar otros procesos. Si se quiere esperar a que acabe un proceso para iniciar otro, el comando wait, usado junto al numero de proceso (el que se quiere esperar), esperar a que acabe para poder seguir trabajando Ejemplo

$sleep 120 & $wait (<pid del proceso anterior>) $yes > /dev/null & !!!

Trabajos en segundo plano


Para ver qu trabajos estan en segundo plano se usa el comando $jobs Los trabajos que han finalizado (4) no aparecern, y los trabajos que acaban de finalizar (5) aparecern una nica vez (la prxima vez que se ejecute el comando jobs, 5 no aparecer). El signo ms (+) seguido del nmero de trabajo entre corchetes, indica el trabajo (proceso) ms reciente que se puede ejecutar o que se est ejecutando. El siguiente trabajo ms reciente se indica con el signo menos (-)

11

De ejecucin en segundo plano a primero


Se puede mover un trabajo (proceso) que se est ejecutando en segundo plano (background) a primer plano a travs del comando fg. Tener en cuenta que el comando que se est ejecutando se muestra en pantalla al pasar a ejecutarse en primer plano. Al igual que se usa %5, tambin se puede referenciar a los dos trabajos ms recientes utilizando %+ y %- respectivamente Ejemplo: $yes > /dev/null & $jobs $fg

De ejecucin en primer plano a segundo


El comando opuesto al usado para pasar trabajos a primer plano, es el comando bg, que permite mover un trabajo desde primer plano (foreground) a segundo plano (background). $ sleep 180 {presionado de Ctrl+Z } [5]+ Stopped sleep 180 Ejecutando el comando bg, se mover el trabajo a segundo plano, y se cambiar el estado del trabajo a "en ejecucin".

12

Manteniendo procesos al cerrar una sesin


Por defecto la mayora de las shells al cerrar una sesin envan la seal SIGHUP a los procesos que se ejecutan en segundo plano, provocando que se terminen. Para solucionar lo anterior, entonces se usa el comando nohup que permite al igual que '&' mandar el proceso y background y que este quede inmune a los hangups (de ah su nombre nohup) que es cuando se cuelga o termina la terminal o consola de la cual se ejecut el proceso

Preguntas ?

13