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
fg
para volver a poner en primer plano el último proceso.Si tiene más de un proceso ejecutándose en segundo plano, haga esto:
fg %3
para volver a poner elvim 23
proceso 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
SIGCONT
para mí; Utilizokill -STOP
y prefierokill -CONT
recordar los números de todos modos, pero puede verificarkill -l
para recordar los valores numéricosjob
yfg <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
dash
admite el control de trabajos (cuando se ejecuta de forma interactiva o con-m
).Interactivo
bg
pondrá en segundo plano el programa suspendido más recientemente(use
bg %2
con el número de trabajo, con el que puede verificarjobs
)fg
pondrá en primer plano el programa suspendido más recientementeEn
zsh
, puede escribir un enlace de clave para ejecutar implícitamentefg
desde el indicador a través de otro Ctrl+ z:Probablemente también haya una manera inteligente de correr implícitamente
bg
al 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 %1
lugar 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
sudo
comandos), 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
CONT
señ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)
fg
Enterdeberí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
STOP
señal a través de los métodos no interactivos anteriores. Esto debería liberar su pantalla (quizás presionar Enteralgunas veces o ejecutarclear
o Ctrl+ L) para que pueda ejecutarjobs
para encontrar el descriptor de trabajo y luego ejecutarfg %N
dóndeN
está ese número.fuente
CONT
señal a un proceso (trabajo / canalización) detenido con Ctrl + Z, se reanudará en segundo plano, incluso si no lo habg
hecho.Escriba
fg
para ponerlo en primer plano.fuente
fg <jobid>
mientras el proceso sale al terminal?jobs
comandofg
; p.ej:fg %4
CTRL Z
para suspenderbg %4
fuente
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
ps
comando y luego puede usar el comando kill para matar el proceso de la siguiente manera:Aquí el
kill
comando terminaría elfirst_one
proceso. Si un proceso ignora unkill
comando regular , puede usarkill -9
seguido del ID del proceso de la siguiente manera:fuente