Digamos que te faltan tanto GNU screen
como tmux
(y X11, y consolas virtuales) pero quieres cambiar entre un shell de inicio de sesión y otro shell interactivo.
Primero debe iniciar sesión en la consola y luego iniciar un nuevo shell, bloqueando temporalmente el shell de inicio de sesión. Para recuperar el shell de inicio de sesión y hacer un trabajo allí, lo haría suspend
. Luego, debería fg
recuperar el shell interactivo para continuar con lo que sea que haya hecho allí.
De hecho, con el control de trabajos, el shell de inicio de sesión podría generar una serie de shells interactivos como trabajos de fondo con los que podría cambiar fg %1
, fg %2
etc., pero para volver al shell de inicio de sesión, necesitaría usarlo a suspend
menos que lo deseara manualmente kill -s STOP $$
.
También tenga en cuenta que Ctrl+ Zen el indicador en un shell interactivo no lo suspenderá.
EDITAR: Inicialmente tenía una larga sección hipotética sobre el uso de suspend
un script, pero dado que el comando requiere control de trabajo y dado que los shells no interactivos generalmente no tienen control de trabajo, eliminé esa sección.
Sección eliminada con suspend
reemplazada por kill -s STOP $$
(esto realmente ya no pertenece a la respuesta, pero puede ser interesante para otros de todos modos):
Supongamos que tiene un proceso en segundo plano (un guión) en un guión, y que este proceso en segundo plano en algún momento debe detenerse y esperar a que el proceso padre le indique que continúe. Esto podría ser para que el padre tenga tiempo de extraer y mover archivos a su lugar o algo así.
El script secundario suspendería ( kill -s STOP $$
), y el script primario le enviaría una CONT
señal cuando estaba bien continuar.
Le brinda la oportunidad de implementar una especie de sincronización entre un proceso padre y un proceso hijo (aunque es muy básico ya que el proceso de shell padre necesita más o menos adivinar que el proceso hijo está suspendido, aunque esto se puede solucionar haciendo que el hijo atrapar CONT
y no suspender si esa señal se recibe demasiado pronto).
fork/exec
llamada al sistema