You are on page 1of 27

GESTIÓN DE PROCESOS

1

1. GESTIÓN DE PROCESOS. INTRODUCCIÓN
Cada programa que se ejecuta es un proceso con recursos asignados y gestionado por el kernel. La gestión de procesos comprende la monitorización, detención y cambio de prioridad de los procesos Generalmente los procesos son gestionados automáticamente por el kernel del S.O. (son creados, ejecutados y detenidos sin la intervención del usuario). Algunas veces los procesos se detendrán por razones desconocidas y será necesario reiniciar el proceso. Otras veces algún proceso se ejecutará descontroladamente malgastando los recursos del sistema, entonces será necesaria una intervención manual del administrador para detener el proceso.
2

1. PARENT PROCESS: Todo proceso es creado por otro proceso. Los PIDs son números enteros únicos para todos los procesos sistema. Estos privilegios quedan determinados por el user ID y group ID del usuario que creo el proceso. Este proceso tiene el PID 1 y es el padre de todos los procesos del sistema. USER ID & GROUP ID: Cada proceso tiene que tener asociado unos privilegios que limiten el acceso al sistema de ficheros. El primer proceso iniciado por el kernel cuando el sistema arranca es el programa init. PARÁMETROS DE UN PROCESO PROCESS ID (PID): Cada proceso tiene un número asociado que se le asigna cuando es creado. el proceso padre (parent process). 3 .

1. NICE NUMBER: Permite al usuario modificar la prioridad de ejecución de un proceso. CURRENT WORKING DIRECTORY: Cada proceso tiene asociado un directorio por defecto. ENVIROMENT: Cada proceso mantiene una lista de variables y sus correspondientes valores. donde el proceso leerá/escribirá archivos. a menos que se le especifique explícitamente lo contrario. Normalmente el entorno de un proceso hijo se hereda del proceso padre a menos de que se indique de otra forma. El conjunto de estas variables recibe el nombre de process enviroment. PARÁMETROS DE UN PROCESO PARENT PROCESS ID: El PID del proceso que inicio el proceso hijo. 4 .

Sin opciones lista los procesos creados por el usuario actual y asociados al terminal de usuario Opciones: -a Muestra los procesos creados por cualquier usuario y asociados a un terminal. -l Formato largo. COMANDOS DE MONITORIZACIÓN DE PROCESOS: PS. 5 . estado de ejecución. Muestra la prioridad. PSTREE Y TOP ps Sintaxis: ps [options] Muestra la lista de procesos del sistema. Incluye el usuario propietario del proceso y la hora de inicio.2. propietario y otros detalles. y algunas de sus características: hora de inicio. el PID del proceso padre entre otras informaciones. -U usr Lista los procesos creados por el usuario “usr” -x Muestra los procesos que no están asociados a ningún terminal del usuario. uso de memoria. Útil para ver los “demonios” (programas residentes) no iniciados desde el terminal. -u Formato de usuario.

. cuanto tiempo de ejecución lleva..2. COMANDOS DE MONITORIZACIÓN DE PROCESOS: PS. Podemos saber el pid del proceso qué programa o originó el proceso. . cuanta memoria ocupa. 6 . PSTREE Y TOP La orden ps proporciona una información muy interesante sobre los procesos que tenemos en ejecución. cuanta CPU consume.

-n Por defecto los procesos con mismo padre se ordenan por el nombre. de lo contrario el árbol empezará por el proceso init (PID=1) y mostrará todos los procesos del sistema.2. 7 . Esta opción fuerza a ordenar los procesos por su PID. el árbol empezará desde ese proceso. -c Deshabilita la unión de procesos hijos con el mismo nombre (replicas de un mismo proceso). -h Remarca la jerarquía del proceso actual (normalmente el terminal). Si se especifica un usuario valido se mostrará la jerarquía de todos los procesos del usuario. No funciona al redireccionar la salida. COMANDOS DE MONITORIZACIÓN DE PROCESOS: PS. -p Incluye el PID de los procesos en el árbol. Opciones: -a Incluye en el árbol de procesos la línea de comandos que se uso para iniciar el proceso. pero no funciona al redireccionar la salida. La representación del árbol es más clara. PSTREE Y TOP pstree Sintaxis: pstree [options] [PID | user] Este comando muestra la jerarquía de los procesos mediante una estructura de árbol. Si se especifica el PID de un proceso. -G Usa los caracteres de línea para dibujar el árbol.

Ordenes interactivas: h Muestra una pantalla de ayuda. -d Especifica el ritmo de actualización de la pantalla en segundos. q Sale del programa. Es especialmente útil cuando es necesario observar el estado de uno o más procesos o comprobar los recursos que consumen. r Renice. Es posible especificar decimales.2. Permite detener un proceso. listando únicamente los que utilizan recursos del sistema. pero la salida se actualiza continuamente. PSTREE Y TOP top Sintaxis: top [options] El comando top ofrece una lista de los procesos similar al comando ps. 8 . k Kill. Permite alterar la prioridad de un proceso. COMANDOS DE MONITORIZACIÓN DE PROCESOS: PS. Opciones: -i Ignora los procesos inactivos.

$firefox & El sistema operativo le asigna el trabajo 1 [1] 1748 (indicado mediante [1]) y el PID 1748. se ejecuta sin bloquear el terminal desde el que se lanzó. Los programas se pueden iniciarse en 2º plano añadiendo el carácter & al final del comando. $firefox Un proceso ejecutado en 2º plano. EJECUCIÓN EN 1º Y 2º PLANO Un proceso ejecutado en 1º plano. Un proceso se lanza en 1º plano simplemente introduciendo su nombre en el terminal y pulsando intro. 9 . se ejecuta bloqueando el terminal desde el que se lanzó.3.

EJECUCIÓN EN 1º Y 2º PLANO Cuando un proceso se inicia en segundo plano. deteniéndolo escribiendo Ctrl-Z y después reiniciando el proceso en 2º plano. empezando por 1 y numerando secuencialmente.3. al cual se le asigna un número entero. Cuando un proceso se ejecuta en segundo plano (background). se crea un trabajo (job). mediante la orden bg. Se puede mover un programa ejecutado en primer plano al segundo plano. la única manera de comunicarse con el proceso es mediante el envio de mensajes (signals). 10 .

11 . indicándole que tiene que detenerse.3. Esta acción realmente envía una señal de interrupción al proceso. conservando su estado y sus recursos para poder continuar en el momento que se dé la orden adecuada. En este caso sólo se detiene la ejecución del proceso. Parar el proceso: C-z (Ctrl-z) . Si intentamos matar el proceso de otro usuario el sistema no nos lo permitirá. salvo a root. OPERACIONES CON PROCESOS EN PRIMER PLANO Con un proceso en 1º plano podemos realizar dos acciones desde el terminal que tiene asociado: Matar el proceso: C-c (Ctrl-c ) se cancela el proceso y se liberan todos los recursos que tuviera asignados. Sólo podremos matar procesos sobre los que tengamos permiso.

Existen 30 diferentes señales definidas en LINUX. este realiza una determinada acción. Cada señal tiene un nombre y un entero. ENVIAR MENSAJES A UN PROCESO: KILL 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 señales a un proceso. Estos mensajes (signals) son números enteros predefinidos y conocidos por los procesos. 12 .4. Cuando un proceso recibe un mensaje.

ENVIAR MENSAJES A UN PROCESO: KILL Nombre SIGHUP Entero 1 Descripción Colgar. Mata un proceso incondicionalmente e inmediatamente. También se usa por muchos demonios para forzar la relectura del archivo de configuración.4. Por ejemplo. Continuar. Parar. Mata un proceso de forma controlada. 13 SIGINT SIGKILL SIGTERM SIGCONT SIGSTOP 2 9 15 18 19 . Esta señal se envía con la secuencia de teclas Ctrl-Z. Esta señal es enviada automáticamente cuando un modem se desconecta. Esta señal se envía con la secuencia de teclas Ctrl-C. en los procesos init y inetd. ya que no se puede ignorar Terminar. pero preparado para continuar. Kill. Enviar esta señal es un método drástico de terminar el proceso. Cuando un proceso detenido recibe esta señal continúa su ejecución. Parar el proceso y desaparece.

Para especificar el tipo de señal se pueden usar –s sigspec o simplemente –sigspec. Si se omite sigspec en el comando kill. El parámetro sigspec es el valor entero de la señal o el nombre de la señal que enviaremos al proceso.4. ORDEN KILL: ENVÍO DE SEÑALES A PROCESOS kill Sintaxis: kill [-s sigspec | –sigspec] [pids] El comando kill permite enviar un mensaje arbitrario a un proceso. Ejemplos: kill -9 337 kill -KILL 337 14 . salir de manera correcta). con un PID igual a pids. pero normalmente se especifica en mayúsculas. o varios. El valor de sigspec se puede especificar en minúsculas o mayúsculas. El valor de pids tendremos que averiguarlos utilizando la orden ps. se toma por defecto el valor SIGTERM (señal 15.

Si estos procesos se están ejecutando de manera “educada”. recibirán la señal SIGTERM y saldrán de manera correcta después de limpiar todo lo que tenían abierto. Para detener un proceso en estos casos es necesario usar la señal KILL que termina el proceso incondicionalmente. kill -9 1000 1001 kill –s KILL 1000 1001 15 .4. Kill 1000 1001 Kill –SIGTERM 1000 1001 Kill –s sigterm 1000 1001 Kill -15 1000 1001 Kill –s 15 1000 1001 kill –s TERM 1000 1001 En algunos casos los procesos se ejecutan descontroladamente e ignorarán la señal SIGTERM. envían la señal SIGTERM a los procesos con PID 1000 y 1001. ORDEN KILL: ENVÍO DE SEÑALES A PROCESOS Ejemplos kill: Comandos equivalentes.

4. y además le envía la señal a todos los procesos que tengan el mismo nombre. Por lo demás. con pid igual a 1. 16 . por lo que serían equivalentes: $ kill -HUP 1 $ killall -HUP init al haber un único proceso init. su comportamiento es idéntico. ORDEN KILL: ENVÍO DE SEÑALES A PROCESOS killall Sintaxis: killall [-s sigspec | –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.

FG. En cambio el número de trabajo es un identificador de uno o varios procesos correspondientes a un usuario. El PID es el número de proceso.5. que es utilizado por el S. JOBS Cuando lanzamos un proceso en segundo plano obtenemos un PID y un número de trabajo. Anteriormente vimos que C-z detiene (suspende) un proceso y lo deja en segundo plano. Ahora lo que vamos ver son los mecanismos para realizar una gestión más completa de esos trabajos. También vimos como podíamos enviarle un señal para que continuara su ejecución en segundo plano. CONTROL DE TRABAJOS DESDE EL TERMINAL: BG. para identificar de forma única al proceso. 17 .O.

CONTROL DE TRABAJOS DESDE EL TERMINAL: BG. como si se hubiese iniciado con &. Si el trabajo especificado está detenido. el comando bg lo reiniciará en segundo plano. Ejemplo: $ sleep 200 (y pulsar C-z) $ bg + jobs $ sleep 201 & + jobs $ fg 2 (y pulsar C-z) $ fg 1 (y pulsar C-z) $ bg %1 $ bg %2 $ ps 18 Ejecutamos en 1º plano y lo detenemos Lo continuamos en 2º plano Ejecutamos en 2º plano Pasamos a 1º plano el ultimo comando Pasamos a 1º plano el primer comando Pasamos a 2º plano los dos comandos . JOBS bg (background) Sintaxis: bg [jobspec] Mueve el trabajo jobspec a segundo plano. FG.5.

FG. Ejemplo: $ sleep 200 (y pulsar C-z) $ sleep 300 (y pulsar C-z) $ fg 1 (y pulsar C-z) $ bg 2 $ fg 1 Ejecutamos en 1º plano y detenemos Ejecutamos en 1º plano y detenemos Pasamos a 1º plano y detenemos Pasamos a 2º plano Pasamos a 1º plano 19 .5. JOBS fg (foreground) Sintaxis: fg [jobspec] Se utiliza para traer a primer plano un trabajo que está en segundo plano. CONTROL DE TRABAJOS DESDE EL TERMINAL: BG. bien esté activo o bien esté detenido.

y los signos + y menos indican: + El trabajo es el primero de la lista . Ejemplo: Entre corchetes tenemos el número de trabajo. CONTROL DE TRABAJOS DESDE EL TERMINAL: BG. Con la orden jobs podemos obtener una lista de los trabajos que hemos lanzado en el sistema. Si se incluye jobspec únicamente listará la información sobre esas tareas. FG.El trabajo es el segundo de la lista 20 .5. La orden jobs se utiliza como: Opciones: -l Lista los PID de las tareas. JOBS jobs Sintaxis: jobs [options] [jobspec] Lista todas las tareas activas.

Los procesos se organizan de forma jerárquica. FG. Pero en muchas ocasiones no puede interesar lanzar un proceso y dejarlo en ejecución aun cuando hayamos cerrado la sesión de trabajo. CONTROL DE TRABAJOS DESDE EL TERMINAL: BG. de forma que si abandonamos la shell que nos conectó al sistema (abandonamos la sesión de trabajo) automáticamente se matarán todos los procesos que dependan de ella. Para esto se usa la orden nohup. JOBS nohup Sintaxis: nohup orden [argumentos] La orden nohup lanza un proceso y lo independiza del terminal que estamos usando.5. 21 .

mayor es el tiempo de CPU dedicado por el kernel a ese proceso. cuanto mayor es el PRI. La prioridad de un proceso puede determinarse examinando la columna PRI en los resultados de los comandos top y ps –l. Normalmente la prioridad de los procesos es gestionada automáticamente por el kernel.tiempo de CPU que otros. al necesitar +/.6. CAMBIAR LA PRIORIDAD DE LOS PROCESOS: NICE & RENICE Cada proceso tiene una determinada prioridad de ejecución. 22 . Los valores mostrados son relativos. No obstante. LINUX ofrece la posibilidad de modificar estas prioridades y favorecer la ejecución de ciertos procesos respecto a otros.

CAMBIAR LA PRIORIDAD DE LOS PROCESOS: NICE & RENICE top ps -l 23 .6.

pero únicamente el usuario root puede asignar números negativos a nice.6. 24 . Cualquier usuario puede aumentar el valor de nice. El parámetro nice puede tomar valores comprendidos entre -20 y +19. Por defecto los procesos poseen un valor de nice igual a cero. e incrementar la prioridad y por lo tanto el tiempo de CPU. Con este valor el kernel no modifica la prioridad del proceso. y bajar la prioridad del proceso. CAMBIAR LA PRIORIDAD DE LOS PROCESOS: NICE & RENICE El parámetro que permite al usuario modificar la prioridad de ejecución de un proceso recibe el nombre de nice number.

Para el usuario root. CAMBIAR LA PRIORIDAD DE LOS PROCESOS: NICE & RENICE nice Sintaxis: nice [-n nicenumber] command nice [-nicenumber] command El comando nice se usa para iniciar un proceso y proporcionarle un determinado valor al parámetro nice. Para los usuarios normales nicenumber es un entero comprendido entre 1 y 19.6. command es cualquier orden valida del interprete de comandos. 25 . argumentos. nicenumber también puede tomar valores negativos (y así incrementar la prioridad del un proceso) y los valores permitidos están comprendidos entre -20 y 19. incluyendo opciones. redireccionamientos y el carácter especial &.

deny nice –n -10 vi /etc/hosts. El primer – se refiere a la opción. Únicamente el usuario root puede asignar un valor negativo al parámetro nice de un proceso. CAMBIAR LA PRIORIDAD DE LOS PROCESOS: NICE & RENICE Ejemplos nice: Ejecuta el editor vi con un valor de nice igual a +10.6. nice --10 vi /etc/hosts.deny Ejecuta el editor vi con un valor de nice igual a -10.deny 26 . El primer – se refiere a la opción.deny nice –n 10 vi /etc/hosts. nice -10 vi /etc/hosts. el segundo se refiere al valor negativo del parámetro nice.

CAMBIAR LA PRIORIDAD DE LOS PROCESOS: NICE & RENICE renice Sintaxis: renice [+|.6. Ejemplos: renice 19 501 Baja la prioridad del proceso con PID 501 incrementando su número nice al máximo. Cambia el parámetro nice a todos los procesos propietarios del usuario especificado. -p Interpreta targets como un PID (comportamiento por defecto). Únicamente el root puede ejecutar el comando renice con valores negativos.nicenumber] [options] targets Este comando permite modificar el parámetro nice de un proceso ya iniciado. renice -20 –u pepe 501 Aumenta la prioridad de todos los procesos del usuario pepe y el proceso con PID 501. Opciones: -u Interpreta targets como un nombre de usuario. 27 .