Sistemas Operativos III
Unidad 08 Administración de Procesos Redes y Comunicaciones de Datos
Copyright © 2007 por TECSUP
Administración de Procesos
1
Sistemas Operativos III
Introducción
Un punto importante a tomar en cuenta cuando se trabaja con un sistema operativo, es la cantidad de recursos que se están utilizando. Estos recursos pueden ser por ejemplo capacidad de procesamiento o memoria, cuyo consumo afecta el rendimiento de la computadora. Este consumo de recursos es realizado por todos procesos que se están ejecutando en la computadora. En esta unidad describiremos la forma cómo Linux trata los procesos, y cómo gestionar y monitorear el uso de los recursos de procesamiento y memoria. 2
Administración de Procesos
2
Sistemas Operativos III
Objetivos
Entender como trabajan los procesos. Entender la genealogía de procesos en Linux. Entender el concepto de procesos “Demonios”. Entender Entender el el concepto concepto de proceso procesoss “Huérfan “Huérfanos” os” y “Difuntos”. Utilizar herramientas de monitoreo del sistema. Realizar control de procesos. Realizar automatización de tareas.
3
Administración de Procesos
3
Sistemas Operativos III
Contenido
Definición de Proceso. Genealogía de Procesos. Procesos Demonios. Procesos Huérfanos y Difuntos. Herramientas de Monitoreo: ps, free, top, w, sar. Control de procesos. Automatización de tareas: at y crontab.
4
Administración de Procesos
4
Sistemas Operativos III
Procesos
Un proceso es un programa en ejecución. Todos los programas que corren bajo Linux son procesos. Por ejemplo, el Shell de un usuario, como bash, es un proceso que se ejecuta mientras está conectado al sistema. Los procesos pueden ser síncronos o asíncronos. Los procesos síncronos se ejecutan uno después de otro, esto se llama también “Proceso en Foreground”. En cambio los procesos asíncronos se pueden ejecutar simultáneamente con otro procesos, esto se llama también “Proceso en Background”.
5
Administración de Procesos
5
Sistemas Operativos III
Procesos: PID
Cada proceso es identificado por un ID: PID: Process Identification Cada proceso tiene un proceso padre identificado por: PPID: Parent Process Identification
Proceso
PPID bash 1 PPID PPID PID1 1 PPID 1 200
6
•Un número identificador , (Process ID o PID), identificador de proceso. Es necesario para referirnos a un proceso en concreto de los varios en ejecución. •Un PPID (Identificador del proceso padre), es el número que indica qué proceso creó al proceso en cuestión. •Un estado ; habrá momentos en los que un proceso seguirá existiendo en el sistema, pero no estará haciendo nada realmente. Puede estar esperando a que una SEÑAL le sea enviada (sobre lo que trataremos más tarde) para volverse activo, o a nosotros como usuarios nos puede interesar detenerlo o pausarlo bajo determinadas circunstancias. Los estados más importanes son dormido (S), y en ejecución (R). •Un dueño , generalmente es el usuario que lo ejecutó, y como ya se dijo, el proceso hereda los permisos del usuario de cara al sistema de ficheros. Si un ejecutable es SUID, al ejecutarse, el proceso resultante adquiere los permisos del usuario dueño del archivo. Generalmente, un usuario normal no puede ejercer control sobre procesos que no le pertenecen. •Una prioridad que determina su importancia. Ya vimos que no todos los procesos eran igual de importantes. Veremos cómo cambiar la prioridad de un proceso más adelante.
Administración de Procesos
6
Sistemas Operativos III
Procesos: PID
Cuando un proceso es creado se le asigna un número (PID) y es añadido a la tabla de procesos y cuando el proceso concluye es retirado de la tabla. Linux mantiene en memoria una tabla de procesos, con información de los procesos activos. TABLA DE PROCESOS .............. .......... .............. ..........
NPROC
.............. .......... .............. ..........
ENTRADA DE TABLA DE PROCESOS
PID PPID UID Prioridad Estado ...
.............. .......... .............. ..........
Administración de Procesos
7
7
Sistemas Operativos III
Arranque del sistema Gestor de arranque
LILO
Kernel
Linux
login
init
mingetty
Padre de todos los procesos
xdm Sistema X Windows
BIOS
bash Intérprete de comandos
8
Según el orden de inicio durante el arranque del sistema Linux observamos que después de cargar la imagen del kernel se inicia el primer proceso del sistema, el proceso Init. Este proceso es el padre de todos los procesos, el inicia el resto de procesos; desde los necesarios para iniciar una interfaz en línea de comandos, hasta los procesos necesarios para iniciar una interfaz gráfica. Otros procesos luego serán iniciados por diferentes programas y por el usuario. Todos estarán debajo de Init, el proceso raíz.
Administración de Procesos
8
Sistemas Operativos III
Genealogía de Procesos
Un proceso que genera nuevos procesos es llamado padre. El nuevo proceso es llamado proceso hijo. El proceso “mingetty” es hijo del proceso “init”. Muchos procesos son creados por el Shell, bash en la mayoría de distribuciones Linux, el cual crea procesos hijos para ejecutarlos.
init
Proces o Padre
mingetty Proces o Hijo
bash
Proces o Padre
cat
Proces o Hijo 9
Administración de Procesos
9
Sistemas Operativos III
Genealogía de Procesos
En Linux los procesos se crean mediante una llamada (call) al sistema, la petición crea otro proceso: “fork”. HIJO PPID bash PPID exec(date) date 1 PPID PPID 1 PPID PPID PID1 1 PPID PID1 1 PPID 300 200 300 200
exit( )
Comando ingresado: $ date
PPID bash 1 PPID PPID PID1 1 PPID 1 200
fork( )
PADRE PPID bash 1 PPID PPID PID1 1 PPID 1 200 Sleep
wait(hijo)
PPID bash 1 PPID PPID PID1 1 PPID 200 1 Sleep 10
Al ejecutar un comando como “date” se realiza los siguientes eventos: •El proceso (en este caso bash) crea una copia de si mismo: fork ( ). •El nuevo proceso será el “proceso hijo”. •El nuevo proceso se sobrescribe con el programa a ejecutar (en este caso date): exec ( ). •Cuando el proceso termina, muestra la fecha y la hora, invoca a la función exit: exit ( ). •El “proceso padre” espera a que el “proceso hijo” termine: wait ( ). •Una vez que el “proceso hijo” muere el proceso padre continua trabajando.
Administración de Procesos
10
Sistemas Operativos III
Procesos Demonios
Son procesos que el sistema inicia para realizar tareas básicas en forma periódica. Estos procesos no están asociados con un terminal (tty) en particular. Algunos procesos demonios conocidos son los siguientes: init (PID 1) : Padre de todos los procesos cron : Tareas automática lpd : Demonio de Impresión LPR
11
Un demonio (o servicio) es un proceso en background que esta designado a correr autónomamente con un poco o nada de intervención del usuario. Un ejemplo es el demonio http (httpd), este espera en background escuchando en puertos específicos y sirve paginas o scripts de acuerdo a la petición que se le haga.
Administración de Procesos
11
Sistemas Operativos III
Proceso Init
Es el proceso padre de todos los procesos del sistema. Permanece en ejecución mientras funciona el sistema. Durante el proceso de encendido lee el archivo de configuración “/etc/inittab” que inicia el resto de procesos. Hay varios niveles de ejecución, desde 0 hasta 6, los cuales se puede invocar manualmente. # init Ejemplo:
# init 0 # init 1
12
•El programa /sbin/init no forma parte de núcleo de Linux, es el primer programa de usuario (su PID es 1). •Después de iniciado el kernel, init coordina el resto del proceso de arranque. •Cuando el comando init inicia, se transforma en el padre (o en el abuelo) de todos los procesos que se producen automáticamente en el sistema. •Siempre que el nivel de ejecución cambia, init utiliza los scripts de /etc/rc.d/init.d para iniciar e interrunpir diferentes servicios, como puedan ser el servidor de red, el servidor DNS, etc.
Administración de Procesos
12
Sistemas Operativos III
Procesos Huérfanos y Difuntos
Proceso Huérfano: Es un proceso que permanece activo después que el proceso padre ha terminado. Son siempre adoptados por el proceso “init” (PID 1). Proceso Difunto (zombie): Proceso que ha terminado pero no ha sido removido de la tabla de procesos, porque su padre ya no esta esperando (wait) por él. Al morir el padre, éstos procesos debe de morir, si aún continúan vivos son adoptados por el proceso “init”.
13
Administración de Procesos
13
Sistemas Operativos III
Herramientas de Monitoreo
Los programas utilizados en el monitoreo del sistema son los siguientes: ps free top w sar
14
Administración de Procesos
14
Sistemas Operativos III
Comando “ps”
Muestra el estado de los procesos activos. Es usado frecuentemente para saber el PID de un proceso “colgado” $ ps -ft $ ps -ef
$ ps -t pts/0 PID TTY 18667 pts/0 18668 pts/0 18744 pts/0 18804 pts/0
TIME CMD 00:00:00 login 00:00:00 bash 00:00:00 su 00:00:00 gunzip 15
Administración de Procesos
15
Sistemas Operativos III
Comando “ps”
Las opciones mas utilizadas son ps –aux, donde: a: Muestra también los procesos iniciados por los otros usuarios; x: Muestra también los procesos sin terminal de control alguna
(esto se aplica a casi todos los servidores); u: Muestra, para cada proceso, el nombre del usuario que lo inició y la hora a la cual fue iniciado. # ps -aux
16
•El campo PID, que contiene el identificador del proceso. •El campo COMMAND contiene el nombre del comando ejecutado. •El uso de la memoria por el proceso se indica en la columna %MEM. •El uso del procesador por el proceso se indica en la columna %CPU. •La columna TIME lista la cantidad total de tiempo de CPU usado. •La columna RSS tamaño del proceso en la memoria principal del sistema. •La columna TTY número de terminal (consola) desde el que el proceso fue lanzado.
Administración de Procesos
16
Sistemas Operativos III
Comando “free”
Muestra la cantidad y uso de la memoria del sistema # free total Mem: 78452 -/+ buffers/cache: Swap: 204468
used 72360 41620 1812
free shared buffers 6092 64 17676 36832 202656
cached 13064
Se puede utilizar el argumento -b, -k, -m y -g para mostrar los valores en Bytes, KB, MB y GB. 17
Administración de Procesos
17
Sistemas Operativos III
Monitor del Sistema Gnome
18
Administración de Procesos
18
Sistemas Operativos III
Comando “w”
Muestra qué están haciendo los usuarios en el sistema Además muestra promedio de carga (uptime) PCPU : tiempo que se esta ejecutando un comando
#w
19
Administración de Procesos
19
Sistemas Operativos III
Comando “top” # top
20
top: es la versión interactiva de ps, y tiene algunas utilidades interesantes
añadidas. Si lo ejecutamos en una terminal y sin opciones, aparecerá arriba información del sistema: usuarios, hora, información del tiempo de funcionamiento de la máquina, número de procesos, uso de CPU, uso de memoria, y uso del swap. Muestra cuáles son los procesos que actualmente están consumiendo más tiempo de CPU y memoria. Se puede modificar la información mostrada en forma interactiva. Opciones: P M h
: Muestra la información ordenada por % CPU (valor por defecto) : Muestra la información ordenada por %MEM : Ayuda
Las opciones se ingresan después de ejecutar el comando TOP.
Administración de Procesos
20
Sistemas Operativos III
Control de Procesos
Procesos en Background : &
Se ingresa el símbolo & después del comando. # find / -name “*tmp” >resul &
Terminación de Procesos: kill
# kill -señal PID
Ejemplos: kill -15 1020 kill -9 1020
// terminación condicional // terminación incondicional
21
Ejecutar un proceso en background significa que el proceso se ejecutara pero dejara libre al shell para continuar recibiendo otros comandos. Para esto utilizamos el símbolo & después del comando. Tanto los procesos en segundo plano (background) como los que están en primer plano, pueden ser detenidos (matados) utilizando el comando KILL. Este comando envía señales a los procesos, para indicarle al proceso que debe de terminar su ejecución. Los procesos pueden manejar o responder las señales sin morir. Solo el dueño del proceso o el superusuario (root) puede matar un proceso. Para esto debemos conocer el PID del proceso que deseamos matar ( con el comando ps aux por ejemplo) y pasarle la señal 9 o 15 según sea el caso.
Administración de Procesos
21
Sistemas Operativos III
Control de Procesos
Terminación de Procesos: kill
Sirve para enviar señales a los procesos, para indicarle al proceso que debe de terminar su ejecución. Los procesos pueden manejar o responder las señales sin morir. Solo el dueño del proceso o el superusuario (root) puede matar un proceso.
# kill -señal PID
Ejemplos: kill -15 1020 kill -9 1020
// terminación condicional // terminación incondicional
22
Procesos que continuan luego de un logout: nohup $ nohup sort bigfile>sortfile & Asignacion de prioridades: nice $ nice --incremento comando # nice --incremento comando
Administración de Procesos
22
Sistemas Operativos III
Automatización de tareas: comando “at”
Ejecuta un comando una sola vez en un tiempo determinado. at [fecha] [incremento]
hora : hhmm (14:00), now, midnight fecha : mes dia [año] (Feb 14), monday, today, tomorrow incremento : +n mins, hrs, days.
Ej. $ at now + 2 min
sort /etc/passwd > /tmp/arch.tmp + d
23
Ejecuta comandos en un tiempo especificado y opcionalmente una fecha. Los comandos pueden ser leídos de la entrada estándar o desde un archivo. Las tareas programadas se ejecutaran una sola vez de acuerdo al tiempo programado.
Administración de Procesos
23
Sistemas Operativos III
Parámetros del comando “at”
Parámetros del comando at H o ra
F e ch a
Inc re m e ntos
Hrs (1,2 digitos)
Mes día año
+n mins
Hrs:min (3,4 digitos)
Dia de la semana
+n hrs
Hrmin (3,4 digitos)
Today
+n days
N ow
Tomorrow
+n weeks
Noon
+n months
Midnight
+n years
Next
24
Administración de Procesos
24
Sistemas Operativos III
Parámetros del comando “at”
Existen otros comandos para administrar los trabajos planificados con el comando “at”. Comando atq Lista las tareas ubicadas en la cola del comando at.
Comando atrm Cancela un proceso ubicado en la cola del comando at.
25
Administración de Procesos
25
Sistemas Operativos III
Comando “crontab”
Ejecuta en forma regular un comando en una fecha y tiempo determinado. Los comando que se van a ejecutar se guardan en un archivo. Este archivo consta de seis campos y puede contener varios comandos. 10
14
4
*
minutos 0-59
horas 0-23
día del mes 1-31
mes 1-12
* día de la semana 0-6 0=Domingo
user01 usuario
/bin/script01 comando
Se ejecuta /bin/script01 todos los días 4 de c ada mes, a las 14:10 horas, con los permisos del usuario user01. 26
Cron es una utilidad que permite ejecutar tareas en segundo plano a intervalos regulares utilizando el demonio CRON. Para esto hace uso de un archivo CRONTAB (CRON TABLE) que contiene las entradas que deberán correr según una hora y días determinados. Cada usuario tiene su propio crontab, y los comandos serán ejecutados con los permisos del usuario que es dueño del crontab.
Administración de Procesos
26
Sistemas Operativos III
Comando “crontab” $ crontab -e
Edita el archivo crontab
.cronfile
0,15,30,45 0 minutos 0-59
* 3
* *
* *
horas 0-23
día del mes 1-31
mes 1-12
$ crontab -l $ crontab -r
1-5 2-6
root root
día de la usuario semana 0-6 0=Domingo
df -v>/tmp/df_log /u/larry/dayly_backup comando
lista las tareas cancela crontab
27
El formato utilizado para las entradas en el crontab es e siguiente: Minuto Hora Dia del Mes Mes Dia de la semana Tareas Minuto = Minuto de la hora, entre 00 y 59. * indica todos los minutos. Hora = Hora del día en formato 24-horas, entre 00 a 23. * Indica todas las horas. Dia del mes = Entre 1 y 31, * indica todos los días. Mes = Mes del año, entre 1 y 12. * indica todos los meses. Dia de la semana = 3 caracteres – sun, mon, tue… o numérico 0=sun, 1=mon,…
* indica todos los dias. Tarea = El comando que se desea ejecutar. Si se desea ejecutar una tarea por ejemplo cada 5 minutos: */5 * * * */script/a/ejecutar Lo mismo se puede utilizar si se desea cada por ejemplo 3 horas: * */3 * * * /script/a/ejecutar
Administración de Procesos
27
Sistemas Operativos III
Enlaces
Reunir Información del sistema: http://www.europe.redhat.com/documentation/rhl9/rhl-cg-es-9/chsysinfo.php3 Tareas automáticas: http://www.europe.redhat.com/documentation/rhl9/rhl-cg-es-9/chautotasks.php3 Resumen de comandos: http://www.osmosislatina.com/linux/comandos.jsp Manejo de procesos: http://es.tldp.org/Tutoriales/TutorialLinux/TutorialLinux/linux_files/linu x3.html Man de Kill http://nixdoc.net/man-pages/Linux/man1/kill.1.html
28
Administración de Procesos
28
Sistemas Operativos III
Preguntas 1. ¿Cuál es el PID del proceso “init”? 2. ¿Con que comando se muestra el uso de memoria del sistema? 3. ¿Cuál es la sentencia que ejecuta el script llamado “script1” en “background”?
29
Administración de Procesos
29