No puedo usar el terminal mientras se ejecuta el comando gedit


44

Recientemente instalé 12.04.
Cuando intento editar un archivo con gedit , no puedo usar el terminal hasta que cierre el archivo de edición o tenga que abrir un nuevo terminal. Pero creo que no tuve este problema con 11.04, sin embargo, no estoy seguro.
¿Hay alguna forma de evitar esto y usar el mismo terminal al editar archivos?

Respuestas:


81

Respuesta corta

En la terminal que no responde:

  1. Hit Ctrl+ Z.
  2. Escribe bgy entra.
  3. Escribe disowny entra.

Respuesta larga

En la terminal que no responde, presione Ctrl+ Z, esto "pausará" el proceso (o "trabajo") y le devolverá el control de la consola. Sin embargo, notará que geditdeja de responder y no puede usarlo.

Extra : si lo desea, puede ejecutar el comando jobs, notará que se leerá Detenido para el geditcomando, por eso no puede usarlo.

Para que el trabajo se ejecute correctamente en segundo plano (es decir, para que geditresponda de nuevo), ejecute el comando bg(que significa fondo). Ahora podrá usar gedity, al mismo tiempo, tendrá el aviso para usted.

Extra : ahora, si ejecuta jobs, notará que leerá Running .

Puedes superar todo esto desde el principio. Cuando esté iniciando geditdesde la terminal, agregue un &al final del comando, así que algo como esto gedit /path/to/file &. Esto se iniciará gediten segundo plano desde el primer lugar (es posible que deba presionar Enterun par de veces para recuperar el control de la consola).

Extra : si seguías estas notas adicionales, es posible que hayas notado que la segunda vez que lo hiciste jobs, podrías ver que bash agregó un &al final del geditcomando.

Una vez que se acostumbre a este sistema, puede notar que si cierra el terminal, gedit también finalizará, sin siquiera un diálogo de confirmación. Para evitar que esto suceda, ejecute disown, lo que separará el proceso gedit del terminal, eliminándolo de la lista devuelta por jobs.


2
Siempre me sorprende que no haya forma de poner en segundo plano de inmediato un proceso que se ejecuta en primer plano. Usted tiene que hacer una pausa en primer lugar, que a veces no es viable.
desvío

@detly lea la parte "Usted puede superar ..." de nuevo!
guntbert

@guntbert - No ayuda si el proceso ya se está ejecutando ...
detly

45

Sólo tipo:

gedit <filename-to-edit> &

Esto le devolverá de inmediato el símbolo del sistema.


55
Este es un idioma de Unix importante, y vale la pena saberlo. Cualquier comando se puede ejecutar en segundo plano de esta manera. Las herramientas que son interactivas obviamente se verán confundidas por este tratamiento, pero por ejemplo bubblesort war_and_peace.txt% le permitirá a su clasificador arrancar la obra maestra (durante mucho, mucho tiempo) mientras continúa con su trabajo (por ejemplo, implementando la selección rápida) o algo así)
Jon Kiparsky

1
@JonKiparsky Ejemplo divertido: hace el punto.
Joe

25

Puede usar el nohuppara evitar que la GUI se conecte a un terminal:

nohup mupdf some.pdf &

Esto le permitirá cerrar la terminal desde la que está iniciando, sin que el programa se cierre.

También debe notar que el comando nohup creará un archivo con stdouty stderrdel comando que ejecuta. Si desea evitar eso, agregue &>/dev/nullantes de &.

nohup mupdf some.pdf &>/dev/null &

44
"nohup" significa "no cuelgue". Esto se remonta a principios de Unix, cuando los terminales (físicos) se conectaban regularmente a través de líneas telefónicas y, por lo tanto, cerraba un terminal colgando el teléfono.
MSalters

3
Información adicional: El comando nohup creará un archivo que nohup.outcontiene la salida del comando. Esto es útil si desea ver mensajes de error. Si no desea que se cree el archivo, agregue la redirección de la siguiente manera:nohup mupdf some.pdf &>/dev/null &
Paddy Landau

19

También puedes usar el disowncomando. Es particularmente útil cuando ya ha comenzado el proceso que ya no desea adjuntar a la terminal.

El procedimiento básico, si no recuerdo mal, es algo como esto:

$ > firefox      #Oops
Ctrl + z         #Suspend the process
$ > bg           #Push the process to the background
$ > disown       #Detach most recent process started or stopped
$ > exit         #Terminal gone!

Tenga en cuenta que disown es bashespecífico.

Esta publicación de blog explica ambos métodos bastante bien.

Página del manual para disown


Un atajo:firefox & disown
Flimm

13

De man gedit:

-b, --background
         Run gedit in the background.

Entonces, si ejecuta geditcon -bopción, comenzará en segundo plano:

gedit -b [FILE-NAME]

Además, a continuación puede crear un alias para gedit -b(vea aquí cómo crear un alias permanente):

alias gedit='gedit -b'

A partir de ahora, en el futuro puede usarlo gedit [FILE-NAME]normalmente y comenzará en segundo plano.


2
Es una mala idea usar alias para redefinir comandos comunes. Encontrarás muchos hilos al respecto en stackexchange. Está bien usar un alias con un nombre diferente. En pocas palabras, alias de comandos existentes crea un comportamiento inesperado en su máquina si alguien más lo usa (como cuando intenta ayudarlo a solucionar otro problema) y le hace lo mismo cuando usa otro sistema sin esos alias y sus comandos No trabajes como esperas. Uno de los niños del cartel para esto es alias rm = 'rm -i'. Te acostumbra a eliminar cosas con una segunda oportunidad que no siempre está ahí.
Joe

10

Sólo tipo:

gedit FILENAME & disown

Al finalizar un comando con &in bash, se ejecuta ese comando en segundo plano. Sin embargo, ese proceso todavía está conectado a la terminal.

Sin embargo disown, si cierra el terminal, gedit se cerrará, sin siquiera solicitarle que guarde un archivo editado. disownsepara el proceso en segundo plano de la terminal actual, de modo que si cierra la terminal, gedit continuará ejecutándose normalmente. Resulta que estaba equivocado, este no es el caso de bash, pero es el caso de zsh. Todavía necesitas correr detachdespués de hacerlo ctrl, zy bg, sin embargo, incluso en bash.

Puede encontrar más información sobre los muebles empotrados jobs, disowny el &meta-carácter en la página del manual para el bashcomandoIcono de página de manual , especialmente la sección titulada "Control de trabajos".


Con disownpude mantener abierto el gedit después de cerrar el terminal. No entendí lo que dijiste sobre "este no es el caso de bash, pero es el caso de zsh"
KrIsHnA

0

Esto probablemente se deba a que abrió gedit a través de la terminal. Cuando hace esto, ve la salida de la línea de comando que normalmente está oculta si se inicia a través de la GUI. La mejor manera de solucionar esto es abrir una nueva ventana de terminal. El otro estará disponible después del cierre de gedit. También puede usar el interruptor que sugirió el usuario anterior.


Una nueva ventana de terminal abarrota el escritorio, incluso si está minimizado. Usar y con o sin desconocer es mucho más simple y limpio.
Joe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.