next up previous contents index
Siguiente: Uso del editor vi Subir: Control de tareas. Anterior: Primer plano y segundo   Índice General   Índice de Materias


Parando y relanzando tareas

Hay otra manera de pasar una tarea a segundo plano. Puede arrancar la tarea normalmente (en primer plano), suspender la tarea, y reiniciarla en segundo plano.

Primero, arranque el proceso yes en primer plano, como hizo antes:
\begin{tscreen}
/home/larry\char93  yes $>$\ /dev/null
\end{tscreen}
Otra vez, como yes está ejecutándose en primer plano, no debería ver el símbolo del intérprete de órdenes.

Ahora, mejor que interrumpir la tarea con Ctrl-C, suspéndala. Suspender una tarea no la mata: sólo la detiene temporalmente hasta que se la reinicia de nuevo. Para hacer esto, pulse la tecla de suspensión, que normalmente es Ctrl-Z.
\begin{tscreen}
/home/larry\char93  yes $>$\ /dev/null \\
\key{ctrl-Z} \\
\verb-[1]+ Stopped yes >/dev/null- \\
/home/larry\char93
\end{tscreen}
Mientras la tarea está suspendida, simplemente no está en ejecución. No se emplea tiempo de CPU para esa tarea. Sin embargo, puede reiniciar la tarea, lo que provoca que se ejecute otra vez como si nada hubiera pasado. Continuará su ejecución por donde se quedó.

Para reiniciar la tarea en primer plano, utilice la orden fg (de ''foreground'').
\begin{tscreen}
/home/larry\char93  fg \\
yes >/dev/null
\end{tscreen}
El intérprete de órdenes muestra el nombre de la orden otra vez para que esté al tanto de qué tarea acaba de mandar a primer plano. Detenga la tarea otra vez con Ctrl-Z. Esta vez, use la orden bg para pasar la tarea a segundo plano. Esto provoca que la orden se ejecute como si lo hubiera arrancado con ''&'', como en la última sección.
\begin{tscreen}
/home/larry\char93  bg \\
\verb-[1]+- yes >/dev/null \& \\
/home/larry\char93
\end{tscreen}
Y aquí tiene su símbolo del intérprete de órdenes de vuelta. jobs debería informar que yes está ciertamente ejecutándose, y puede matar la tarea con kill como hicimos antes.

¿Cómo se puede detener la tarea otra vez? Utilizar Ctrl-Z no funcionará, porque la tarea está en segundo plano. La respuesta es pasar la tarea a primer plano con fg, y luego detenerla. Tal y como parece, puede utilizar fg tanto en tareas detenidas como en tareas en segundo plano.

Hay una gran diferencia entre una tarea en segundo plano y una tarea detenida. Una tarea detenida no está en ejecución --no está usando tiempo de CPU, y no está haciendo nada (la tarea todavía ocupa memoria del sistema, aunque puede haber sido volcada a disco). Una tarea en segundo plano sí está ejecutándose y usando memoria, al tiempo que completa alguna acción mientras usted hace otra cosa.

Sin embargo, una tarea en segundo plano puede intentar mostrar texto por el terminal, lo que puede resultar molesto si está intentando trabajar en otra cosa. Por ejemplo, si utilizó la orden
\begin{tscreen}
/home/larry\char93  yes \&
\end{tscreen}
sin redirigir stdout a /dev/null, una cadena de ys estará apareciendo en la pantalla, sin posibilidad de interrumpirla. (No se puede usar Ctrl-C para interrumpir tareas en segundo plano.) Para detener las infinitas ys, utilice la orden fg para pasar la tarea a primer plano, y luego utilice Ctrl-C para matarla.

Otra nota. Las órdenes fg y bg normalmente afectan a la última tarea detenida (indicado por un ''+'' junto al número de tarea cuando se usa la orden jobs). Si está ejecutando diversas tareas a la vez, puede pasar tareas a primer o segundo plano pasando el número de tarea como argumento a fg o bg, como en
\begin{tscreen}
/home/larry\char93  fg \%2
\end{tscreen}
(para pasar la tarea número 2 a primer plano), o
\begin{tscreen}
/home/larry\char93  bg \%3
\end{tscreen}
(para pasar la tarea número 3 a segundo plano). No se pueden usar identificadores de proceso (PID) con fg o bg.

Además, usar el número de tarea sólamente, como en
\begin{tscreen}
/home/larry\char93  \%2
\end{tscreen}
equivale a
\begin{tscreen}
/home/larry\char93  fg \%2
\end{tscreen}

Recuerde que el control de tareas es una característica del intérprete de órdenes. Las instrucciones fg, bg y tareas son internas del intérprete de órdenes. Si por cualquier motivo usted utiliza un intérprete de órdenes que no soporte control de tareas, no espere encontrar estas instrucciones disponibles.

Por añadidura, hay algunos aspectos del control de tareas que varían entre bash y tcsh. De hecho, algunos intérpretes de órdenes no proporcionan control de tareas en absoluto--de cualquier manera, la mayoría de los intérpretes de órdenes disponibles para sí lo proporcionan.


next up previous contents index
Siguiente: Uso del editor vi Subir: Control de tareas. Anterior: Primer plano y segundo   Índice General   Índice de Materias
Ismael Olea 2002-09-26