suspend
es un comando incorporado en Bash. ¿Cuándo utilizaría este comando de forma natural y lo encontraría útil?
12
suspend
es un comando incorporado en Bash. ¿Cuándo utilizaría este comando de forma natural y lo encontraría útil?
fork/exec
llamada al sistemaSTOP
señal) cuando bifurca un proceso secundario. También estoy un poco confundido por tu segundo comentario.wait()
parece razonable. Dije que el shell se suspende cada vez que bifurca un proceso secundario . No dije nada acerca de recibir señales de alto, eso no tendría sentido.Respuestas:
Digamos que te faltan tanto GNU
screen
comotmux
(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íafg
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 asuspend
menos que lo deseara manualmentekill -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 porkill -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 unaCONT
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).fuente