Estoy ejecutando una aplicación que recibe paquetes TCP y UDP y, por lo tanto, no se puede suspender. Inicialmente ejecuté 3 procesos de la misma aplicación, con diferentes argumentos, en modo de fondo usando &
. Cuando solo lo hice $fg
, los tres procesos entraron en primer plano. Ahora quiero enviarlos al fondo nuevamente pero sin suspensión. ¿Cómo puedo hacer eso?
11
Respuestas:
Primero lo primero: solo puede haber un proceso en primer plano, no los tres.
fg
trae el último proceso a primer plano. Para hacer el proceso de Ctrl+ z, luego escribabg
más rápido para no "perturbar" la aplicación en cuestión (tenga en cuenta que el planificador de procesos lo hará de todas formas muchas veces por segundo), descubra el PID del proceso en primer plano, luego en un segundo terminal / Sesión SSH, useTu terminal original dirá
stopped
, pero como enviaste un mensaje deSIGCONT
inmediato, el proceso continuará ejecutándose en segundo plano.fuente
Si realmente tiene un trabajo en primer plano, entonces bash está esperando que se complete, esa es más o menos la definición de un trabajo en primer plano . Si bash todavía tiene el control de la terminal, verifique qué sucede con
jobs -l
, por ejemplo:Comencé tres
ncat
procesos de escucha en segundo plano para esto. También puede ver "Listo" o "Detenido" para ver el estado de un trabajo.Puede realizar un trabajo en segundo plano de manera efectiva desde un shell diferente utilizando el método SIGSTOP / SIGCONT de Stefan Seidel (aunque la señal real enviada por un shell con Ctrl- Zes SIGTSTP, cualquiera de las señales debería funcionar).
Existe una sutil distinción entre procesos y trabajos cuando se utilizan los términos primer plano y fondo. Solo hay un trabajo en primer plano de shell , puede haber varios procesos en primer plano (esto está relacionado con las ID de grupo de proceso de terminal y se puede observar cuando inicia dos o más procesos en una tubería).
Un proceso en ejecución o una tubería bajo el control del shell se conoce como un "trabajo", cuando usa el comando
bg
ofg
está refiriendo implícitamente el trabajo más reciente, en mi caso el que está+
en el anterior. Estos trabajos también pueden (entre otras cosas) referirse explícitamente como% 1% 2 o% 3 (el número en[]
).Un
fg
comando no calificado solo afectará un trabajo, el más reciente, por lo que puede estar equivocado en su comprensión de la situación actual. Un trabajo en segundo plano aún puede escribir en la terminal:Puede depender de cómo el programa maneja el terminal,
ncat
funciona bien para escribir. Para leer, aunque los programas detendrán la ejecución, verá un mensaje "Detenido". El shell iniciará procesos y esperará a que salgan o reciban una señal SIGTTIN (nohup
es una forma de evitar esto, tal como estádisown
).Puede crear un fondo de un trabajo detenido específico con
(en mi caso obtendré el error
bash: bg: job 3 already in background
)De lo contrario, si un proceso está en primer plano, a menos que el programa detecte SIGTSTP y haga algo especial, es poco probable que tenga problemas con un rápido Ctrl- Zy
bg
. No hay nada especial sobre los programas de red a este respecto, las conexiones / datos entrantes serán almacenados por el núcleo (hasta cierto punto). Sin embargo, una conexión de transmisión puede tener una pausa observable.Consulte la sección " CONTROL DE TRABAJO " de la página de manual de bash para obtener más detalles.
fuente
La forma más fácil de hacerlo es usar el programa de pantalla . Puede iniciar su aplicación dentro del terminal virtual, luego salir de la pantalla con Ctrl + A, D. Si desea reanudar su sesión, escriba su tipo
screen -x
. Si tiene varios procesos, se le presentará una lista de pantallas para volver a adjuntar. Para obtener más detalles, lea la página de manual de la pantalla .fuente