Digamos que inició una nueva aplicación en Linux (como un editor de texto, etc.), pero olvidó usar el "&". ¿Qué comando (s) usaría para hacer que ese proceso se ejecute en segundo plano, sin tener que CERRAR esa aplicación? De esta manera, puede hacer que ambos procesos se abran y funcionen por separado (por ejemplo, el terminal de línea de comando que utilizó para crear el proceso y el proceso, como un editor de texto que aún se ejecuta.
24
tmux
ofrece la misma funcionalidad deseada en su pregunta.Respuestas:
En la ventana de terminal, normalmente escribirías Control+ Zpara "suspender" el proceso y luego usarías el
bg
comando para "ponerlo en segundo plano".por ejemplo, con un comando de suspensión
Podemos ver que el proceso se está ejecutando y todavía tengo mi línea de comando.
fuente
fg
comando, que toma la identificación del trabajo (especificada entre paréntesis,1
en este caso) como parámetro. No es específico para el usobg
y se puede hacer en procesos iniciados con&
.Ctrl+ Zes la forma de hacerlo, pero solo para completar: la pregunta pide "comando", y eso sería (desde otro terminal):
y luego por supuesto
desde el terminal de aplicaciones.
fuente
En Bash:
Ctrl+ Zy luego
bg
.Ahora corre
jobs
y mira el resultado.fuente
/bin/sh
así que esto no habría funcionado :-)Como medida preventiva por la inconveniencia de tener que pulse CTRL- z, usted podría hacer un script de envoltorio para su editor para que ejecute su editor en el fondo. De esta manera, no necesitaría tener cuidado de recordar iniciarlo en segundo plano explícitamente:
Arriba, primero tratamos de determinar si tiene un servidor X disponible y solo luego ejecuta el editor en segundo plano (si no, muchos editores de Unix usarán su terminal y no desea ejecutar el editor como un proceso en segundo plano en este caso) . Pasará todos los argumentos a su editor de elección literal (
"$@"
) tal como lo proporcionó para el script de envoltura.En cuanto al comando que se está perdiendo ... Según mi experimentación básica, para los programas GUI que no involucran terminal, podría ser tan simple como enviar primero
SIGSTOP
y luegoSIGCONT
al proceso de primer plano (usando elkill
comando si usa un script de shell para implementar esto) . Por supuesto, necesitaría ejecutarlo en otra ventana / pestaña de terminal, y la dificultad sería encontrar de manera conveniente y genérica el PID al que desea enviar su señal. Por defecto, puede enviar las dos señales a todos los procesos del nombre dado (por defecto a su editor favorito y permitiendo también usar PID como argumentos):Este método me dio correctamente mis pestañas de terminal después de ejecutar (varios)
emacs
comandos en segundo plano. Pero el proceso de emacs que se ejecuta en el terminal no se restauró correctamente debido al control del trabajo de shell o la confusión de la configuración del terminal. Entonces, este método se beneficiaría de cierta sofisticación.Esto
SIGSTOP
es exactamente lo que se envía al proceso de primer plano cuando presiona (por defecto común) CTRL- z. Consulte lastty -a
salida(salida abreviada) y
stty
página del manual:Los procesos detenidos mediante la
SIGSTOP
señal se pueden reiniciar enviandoSIGCONT
. Normalmente, es la lógica de control de trabajo de shell la que enviaráSIGCONT
y se encargará de otras manipulaciones necesarias involucradasfg
ybg
comandos que ignoramos.fuente