domingo, 17 de octubre de 2010

Curso básico de Unix (XI)

Hoy nos vamos a internar en el mundo de los procesos y sus prioridades. Un mundo donde debemos ir con cierto cuidado, puesto que podemos finalizar un proceso o modificar su prioridad haciendo que un programa deje de funcionar o lo haga lentamente, y esto puede influir en otros procesos interdependientes, dejarlos huérfanos  o ralentizar el equipo.

Todo proceso surge como parte de un programa. Al ejecutar un programa, este se carga en memoria convirtiéndose en un proceso. A cada proceso se le asignan unos recursos (memoria, procesador, variables…) y cuando se crea, cada proceso recibe un identificador (PID) que se libera cuando este acaba.

El sistema controla los procesos con dos tablas de proceso, la denominada TPU (Tabla de Procesos de Usuario) donde se controlan los procesos de los usuarios y la TPG  (Tabla de Procesos Global) donde se encuentran  tanto los procesos de usuarios, como los de administradores o los del propio sistema. Puedo ver mi TPU usando el comando ps.

Un proceso puede estar en varios estados; preparado, ejecutando, en espera, parado y zombie. Veámoslos con un poco más de detalle:

  • Preparado (ready). Es el primer estado, cuando se crea, antes de pasar a la cpu. Si con un ciclo de cpu no tiene suficiente para finalizar, volverá a este estado hasta que se le vuelva a asignar cpu.
  • Ejecución. Esta haciendo uso de la cpu para ejecutarse en ese momento.
  • En espera (wait). Esta a la espera de que algún recurso este disponible; un disco, una impresora, un modem…. Cuando el recurso este listo, el proceso pasara al estado “preparado”.
  • Parado (sleeping). Es un proceso en espera que se ha llevado al SWAP para no saturar el sistema. De aquí volverá a la memoria con es estado “en espera”...
  • Zombie. Cuando un proceso padre muere, debe matar a sus hijos. Cuando un hijo finaliza, avisa de ello al padre le devuelve los datos necesarios  y muere. Si se encuentra en estado zombie, es que el proceso se ha quedado sin padre, este ha muerto, y el hijo no tiene a quien devolver los datos.

Ahora que ya sabemos los estados en los que podemos encontrar los procesos, vamos a ver algunos de los más importantes que se están ejecutando en nuestra maquina.

  • scheduling, Es quien planifica quien entra a la CPU
  • swapper. Es el encargado de gestionar la SWAP.
  • cron. Se encarga de planificar acciones que hay que realizar cada determinado periodo de tiempo o en momentos específicos.
  • init. Es el primer proceso, se crea cuando el kernel entra en memoria tras el arranque, y se encarga del resto del proceso de arranque.
  • inet. Es quien gestiona los servicios de red.

Bueno, y ahora que ya conocemos lo que son los procesos, cuales son sus estados, y alguno de los procesos mas importantes, ha llegado el momento de que aprendamos a gestionarlos.

Lo primero, ¿qué procesos hay actualmente en el sistema?

  • ps [opciones]

Sirve para listarnos los procesos de la tabla de procesos de usuario y proporcionarnos información sobre ellos.

-a muestra todos los procesos del usuario
-e muestra todos los procesos del sistema (muestra la TPG)
-f muestra la información ampliada.

Por ejemplo, si ponemos ps –fea nos devolverá la siguiente información de cada proceso:

S Estado
UID Usuario que lo lanzó
PID Identificador del proceso
PPID Identificador del proceso padre
C Tiempo de cpu

Ya sabemos que procesos tenemos corriendo, vamos a matar alguno.

  • kill señal PID

Termina procesos de manera “mas o menos  amistosa” según la señal que se le indique. Las señales mas comunes son -15 para hacerlo de forma “amistosa” y -9 para acabar el proceso por las bravas.

Ahora supongamos que tenemos que lanzar algún proceso que va a tardar más de lo que tardaremos en desconectarnos. Si lo lanzamos sin mas, de cerrara este como este cuando cerremos sesión, así que lo podemos hacer es crearlo con nohup para que “perviva” a nuestra sesión. Si tiene que devolvernos datos, lo hará dejando e en nuestra home un fichero nohup.out

  • nohup comando &

Otra forma de ejecutar un proceso que nos puede interesar, es lanzarlo para que se ejecute a una hora determinada.

  • at [opción] trabajo fecha

-m programa un trabajo y envía un mail cuando finaliza
-r elimina el trabajo programado
-l informa de los trabajos activos

Todo lo que programes con este comando, queda grabado en el fichero /var/spool/cron/atjobs

Y llegamos al rey de la programación de procesos, crontab. Permite ejecutar un proceso en un momento dado, o a intervalos de tiempo, o incluso en momentos concretos del día, del mes, del año… Solo lo pueden utilizar los usuarios incluidos en /etc/cron.d/cron.allow. En caso de no existir, solo puede usarlo root.

  • crontab –e permite editar el fichero de la programación
  • crontab –l permite ver el fichero de la programación

El formato del fichero de programación es el siguiente:

minuto hora día mes_del_mes mes dia_de_la_semana comando

Cada linea se corresponde a un evento programado y nos referimos al domingo como día 0, el lunes es el 1 y así sucesivamente hasta el sábado, que es 5.

Y con esto ya sabemos manejar un poco los procesos, sabemos matarlos, programarlos… Para un usuario común, que es a quien se dirige este curso,  ya tenemos suficiente, así que daremos por finalizada aquí la lección…. ¡Hasta la siguiente!

No hay comentarios:

Publicar un comentario

prekes sodui