Tengo un proceso que originalmente se ejecuta en primer plano. Suspendí por Ctrl+ Z, y luego reanudo su ejecución en segundo plano por bg <jobid>.
Me pregunto cómo suspender un proceso que se ejecuta en segundo plano.
¿Cómo puedo llevar un proceso en segundo plano a primer plano?
Editar:
El proceso sale a stderr, entonces, ¿cómo debo emitir el comando fg <jobid>mientras el proceso sale al terminal?

fg <jobid>para ponerlo en primer plano?Respuestas:
Como dijo Tim, escriba
fgpara volver a poner en primer plano el último proceso.Si tiene más de un proceso ejecutándose en segundo plano, haga esto:
fg %3para volver a poner elvim 23proceso en primer plano.Para suspender el proceso que se ejecuta en segundo plano, use:
La señal SIGSTOP detiene (pausa) un proceso esencialmente de la misma manera que Ctrl+ lo Zhace.
ejemplo:
kill -STOP %3.fuentes: cómo enviar señales a procesos en Linux y Unix y cómo gestionar trabajos en segundo plano y en primer plano .
fuente
SIGCONTpara mí; Utilizokill -STOPy prefierokill -CONTrecordar los números de todos modos, pero puede verificarkill -lpara recordar los valores numéricosjobyfg <jobid>mientras el proceso sale al terminal?kill -STOP %job_id, como se explicaEsto debería ser cierto para cualquier shell con control de trabajo, que (en su mayor parte) puede dar por sentado a menos que se trate de un shell verdaderamente antiguo. Está en el estándar POSIX , por lo que incluso
dashadmite el control de trabajos (cuando se ejecuta de forma interactiva o con-m).Interactivo
bgpondrá en segundo plano el programa suspendido más recientemente(use
bg %2con el número de trabajo, con el que puede verificarjobs)fgpondrá en primer plano el programa suspendido más recientementeEn
zsh, puede escribir un enlace de clave para ejecutar implícitamentefgdesde el indicador a través de otro Ctrl+ z:Probablemente también haya una manera inteligente de correr implícitamente
bgal suspender, pero parece poco sabio; al menos para mí, la mayoría de mi Ctrl+ zuso se debe a que Ctrl+ cestá fallando; Quiero seguir eso con, por ejemplo, enkill %1lugar debg, ¡y ciertamente no quiero dejar de matar por defecto! (Esta lógica también se extiende a por qué ya no uso esta combinación de teclas: si estoy presionando Ctrl+ zpara detener un proceso, ¡lo último que quiero que haga es reanudar!)No interactivo
Si está en una instancia de shell diferente (o un usuario diferente, a veces incluyendo
sudocomandos), es probable que no pueda usar números de trabajo.Todavía puede actuar en otro proceso una vez que conoce su ID de proceso (PID). Puede obtener el PID con
pgrep …ops aux |grep …(o desde el mismo shelljobs -l, o$!) y luego puede ejecutar:Si no conoce el ID del proceso y no le preocupa suspender otras instancias del proceso por nombre, puede pasar señales a uno de estos:
Una
CONTseñal a un programa detenido con Ctrl+ z(y nobg'd) reanudará su progreso (en primer plano), de la misma manera que si estuviera enfgél.Re: Error estándar
La edición de esta pregunta pregunta sobre el error estándar:
A menos que el trabajo en cuestión tenga componentes que estén en segundo plano (o que todo el trabajo esté en segundo plano, tal vez a través de
kill -CONT), en realidad no debería ver la salida mientras está suspendido.Si todavía está emitiendo datos (ya sea a la salida estándar o error estándar), ciertamente hará que su terminal esté desordenada visualmente, pero toda esa salida será ignorada ya que no es parte de su entrada. Esto podría hacer que sea más difícil saber que no ha ingresado ningún error tipográfico, pero la escritura (a ciegas)
fgEnterdebería ser suficiente (a menos que tenga varios trabajos y el en cuestión no sea el más reciente, en cuyo caso necesitará el descriptor de trabajo )Si necesita encontrar el descriptor de trabajo, use otro terminal para enviarle la
STOPseñal a través de los métodos no interactivos anteriores. Esto debería liberar su pantalla (quizás presionar Enteralgunas veces o ejecutarclearo Ctrl+ L) para que pueda ejecutarjobspara encontrar el descriptor de trabajo y luego ejecutarfg %NdóndeNestá ese número.fuente
CONTseñal a un proceso (trabajo / canalización) detenido con Ctrl + Z, se reanudará en segundo plano, incluso si no lo habghecho.Escriba
fgpara ponerlo en primer plano.fuente
fg <jobid>mientras el proceso sale al terminal?jobscomandofg; p.ej:fg %4CTRL Zpara suspenderbg %4fuente
La finalización de un proceso se puede hacer de varias maneras diferentes. A menudo, desde un comando basado en consola, el envío de una Ctrlcpulsación de tecla (el carácter de interrupción predeterminado) saldrá del comando. Esto funciona cuando el proceso se ejecuta en modo de primer plano.
Si un proceso se está ejecutando en modo de segundo plano, primero deberá obtener su ID de trabajo con el
pscomando y luego puede usar el comando kill para matar el proceso de la siguiente manera:Aquí el
killcomando terminaría elfirst_oneproceso. Si un proceso ignora unkillcomando regular , puede usarkill -9seguido del ID del proceso de la siguiente manera:fuente