next up previous contents index
Next: Algunas características de bash Up: La Introducción Previous: El intérprete   Índice General   Índice de Materias


Control de procesos mediante bash

Debian es un sistema multitarea, por lo que necesitará una manera de ejecutar más de una tarea a la vez. Los entornos gráficos como X proporcionan una manera natural de hacerlo; permiten situar varias ventanas en la pantalla a la vez. Naturalmente, bash (o cualquier otro intérprete), le proporciona un servicio similar.

Antes utilizó top para echar un vistazo a los diferentes procesos del sistema. Su intérprete proporciona algunas maneras convenientes para llevar un control sólo de los procesos que haya iniciado desde la línea de órdenes. Cada línea de órdenes inicia una tarea (job, también denominado un grupo de procesos) que va a controlar el intérprete. Una tarea puede consistir en un solo proceso o en un conjunto de procesos en una tubería (pipeline, más adelante veremos más cosas sobre ellas).

Introducir una línea de órdenes iniciará una tarea. Pruebe a teclear man cp, y aparecerá la página de manual de cp en la pantalla. El intérprete se quedará en un segundo plano y volverá cuando usted haya terminado de leer la página del manual (o haya pulsado la tecla q para salir en lugar de desplazarse por toda la página).

Supongamos que está leyendo la página del manual, y desea de repente hacer otra tarea durante un minuto. No hay problema. Pulse Ctrl-z mientras está leyendo para suspender la tarea en ejecución y hacer volver el intérprete a un primer plano. Cuando suspende una tarea, bash le dará cierta información sobre ella, seguida del símbolo del intérprete de órdenes. Verá en la pantalla algo como esto:

     NAME cp - copy files SYNOPSIS cp [options] source
     -More-

     [1]+ Stopped man cp

     $
Fíjese en las últimas dos líneas. Lo último que aparece es la información sobre el proceso, y después tendrá la línea de órdenes del intérprete. bash asigna un número de tarea a cada línea de órdenes que usted ejecute desde el intérprete. Esto le permite referirse a ese proceso de forma sencilla. En este caso, man cp es la tarea número 1, que aparece como [1]. El signo + significa que es la última tarea que ha pasado a segundo plano. bash también le comunica el estado actual de la tarea (Stopped, detenido) y la línea de órdenes de la tarea.

Hay muchas cosas que se pueden hacer con las tareas. Con man cp todavía suspendida, intente hacer lo siguiente:

     man ls
Inicia una nueva tarea.


     Ctrl-z
Suspende la tarea man ls; debería ver su información de proceso.

     man mv
Inicia otra tarea.

     Ctrl-z
La suspende

     jobs
Le pide a bash que muestre las tareas activas. El resultado debería parecerse a esto:

     {$} jobs

     [1] Stopped man cp

     [2]- Stopped man ls

     [3]+ Stopped man mv

     {$}
Fíjese en + y -, que indican respectivamente la última tarea en estar en primer plano, y la penúltima.

     fg
Devuelve la última tarea que estuvo en primer plano (man mv, la que tiene el +) a la pantalla. Si pulsa la barra espaciadora, la página de manual seguirá desplazándose.

     Ctrl-z
Vuelve a suspender man mv.

     fg %1
Puede referirse a cualquier tarea poniendo un % delante de su número. Si utiliza fg sin especificar una tarea, se asume que nos referimos a la última que estuvo activa.

     Ctrl-z
Vuelve a suspender man cp.

     kill %1
Elimina la tarea 1. bash mostrará la información referente a la tarea, que se parecerá a esto:

     $ kill %1

     [1]- Terminated man cp

     $
bash sólo le pide a la tarea que termine, y hay veces que ésta no querrá hacerlo. Si la tarea no termina, puede añadir la opción -KILL11.1  a kill para dejar de pedir y pasar a ordenar. Por ejemplo:

     $ kill -KILL %1

     [1]- Killed man mv

     $
La opción -KILL mata forzosa e incondicionalmente la tarea.

En términos técnicos, kill se limita a enviar una señal. Por defecto, envía una señal que solicita finalización (TERM, la señal 15), pero también puede ser específico, y la señal 9 (KILL) es la que fuerza esa terminación. El nombre de la orden kill no es necesariamente apropiado a la señal que envía; por ejemplo, enviar la señal TSTP (terminal stop) suspende el proceso, pero permite que continúe más adelante.

     top
Esto nos lleva de nuevo a la pantalla de top. Indíquele la orden u para ver sólo sus procesos. Examine la columna de la derecha en busca de man ls y man mv. man cp no estará ahí, porque la mató. top estará mostrándole los procesos del sistema correspondientes a sus tareas; fíjese que el PID a la izquierda de la pantalla no se corresponde al número de tarea.

Puede que no sea capaz de localizar sus procesos porque «se salen» por la parte de abajo de la pantalla; si está utilizando X (vea el Capítulo 15 en la página [*]), podrá cambiar el tamaño de la xterm para solventar este problema.

Incluso estas sencillas tareas, realmente consisten en varios procesos, incluyendo el proceso man y el paginador more, que controla el desplazamiento de página en página. Comprobará que también hay procesos more visibles en top.

Posiblemente se esté imaginando cómo eliminar el resto de las tareas. Puede matarlas (con la orden kill) o pasarlas a primer plano una por una (con fg) para salir de ellas. Recuerde que la orden jobs le indica la lista de tareas existentes, y su estado.

Una última nota: La documentación de bash es muy buena, pero se encuentra en el sistema de ayuda Info en lugar de hallarse en páginas de manual. Para leerla, escriba info bash. Lea la sección B.1.1 para aprender a utilizar el programa info. bash muestra también un resumen bastante bueno de sus órdenes, accesible mediante la orden help. help muestra una lista de temas disponibles; se puede obtener más información sobre cada uno mediante la orden help nombre tema. Pruebe a escribir help cd, por ejemplo. Esto le dará detalles al respecto de los argumentos -P y texttt-L reconocidos por cd.


next up previous contents index
Next: Algunas características de bash Up: La Introducción Previous: El intérprete   Índice General   Índice de Materias
Enrique Zanardi 2000-11-26