En la CLI, a veces un comando que escribo tarda un tiempo en completarse, y a veces sé cuándo está a punto de suceder. Estoy un poco confundido con el "fondo" y tal en Linux.
¿Cuál es la forma más común (o fácil de usar) de decirle a la CLI que no quiero esperar, devuélvame mi aviso de inmediato. Y si pudiera darme una barra de progreso o simplemente un hilado ocupado, ¡sería genial!
command-line
background-process
el espejo
fuente
fuente
Respuestas:
Antes de ejecutar el comando, puede agregar
&
la línea de comando para que se ejecute en segundo plano:Después de iniciar un comando, puede presionar CtrlZpara suspenderlo y luego
bg
ponerlo en segundo plano:fuente
find ...
comando primero y luego ejecutarlo en segundo plano. En este caso te faltaba la-name
opción.Este es el favorito de todos, ya que además de enviar el proceso a un segundo plano, no tiene que preocuparse por la salida de texto que ensucia su terminal:
Esto no solo ejecuta el proceso en segundo plano, también genera un registro (llamado
nohup.out
en el directorio actual, si eso no es posible, su directorio de inicio) y si cierra / cierra el shell actual, el proceso no se detiene al evitar que el proceso secundario reciba el padre señala cuando se mata (es decir, cerrar sesión, mediante SIGHUP al padre, o cerrar el shell actual).Hay otro llamado,
disown
pero es más bien una extensión de otras respuestas en lugar de un método en sí mismo:Estos comandos no le permiten recuperar fácilmente los resultados del proceso a menos que use una forma hack para hacerlo.
fuente
nohup
en un shell de control de trabajo es una tontería. Los proyectiles modernos no se envíanHUP
a procesos en segundo plano. Redirigir a un nombre de archivo único es un pequeño precio a pagar.command > file.log 2>&1 & disown
es un poco más largo que,nohup command &
pero supongo que eso es lo que @chicks estaba sugiriendo.Esto es probablemente lo que quieres
my_command > output.log 2>&1 &
Esto iniciará su comando, redirigiendo tanto stdout como stderr a algunos
output.log
que puede especificar. Si no le importa almacenar la salida, puede usarla en/dev/null
lugar de un archivo real.&
ejecutará el comando en segundo plano para que pueda continuar ingresando comandos mientras se está ejecutando.2>&1
redirige stderr a stdout para que se capture toda la salida.Además, cuando ejecuta un comando como este, debe obtener una confirmación del núcleo similar a la siguiente:
[2] 1234
Esto significa que su proceso se está ejecutando en segundo plano y su ID es1234
, por lo que puede matarlo más tarde si lo desea conkill -9 1234
fuente
2>&1
es muy importante porque el comando puede fallar e intentarlo generar el error en algunos casos.Mira en la pantalla o tmux . Un ejemplo con
tmux
:Si bien las otras respuestas que usan '&' a fondo funcionarán, debe redirigir stdout (¡y stderr!). Sin hacer eso, la salida irá directamente a su shell, mezclándose con cualquier otra salida que pueda tener.
El fondo también fallará si está ejecutando un comando largo y cierra la sesión o se desconecta. El sistema matará tu trabajo.
Si no está familiarizado con screen o tmux, básicamente le permiten desconectarse por completo de su shell. En lugar de poner en segundo plano su programa, pone en segundo plano todo el shell. Luego puede volver a él más tarde, incluso desde otra computadora. Ambos tienen muchas más funciones que pueden ser útiles o no más allá de este caso de uso.
Screen es el viejo programa probado y verdadero; tmux es mucho más joven pero ha aprendido del pasado de la pantalla.
fuente
(Para completar, ya respondió :) Pones un comando en segundo plano agregando
&
después del comando:Estoy agregando esta respuesta para abordar la otra parte de su pregunta:
No existe un equivalente real del control giratorio para mostrar comandos de fondo en progreso, pero puede ver el estado de los comandos de fondo escribiendo
jobs
ojobs -l
. Le mostrará sus comandos en segundo plano, y si están ejecutándose, detenidos por señal (por ejemplo, con^Z
) u ocasionalmente detenidos porque están esperando una entrada interactiva de usted.fuente
long_command with arguments &> redirection &
para redirigir elstderr
tambiénPuede ejecutar un programa en segundo plano usando
&
. Por ejemplo, si desea ejecutar,yum install XyZ
por ejemplo, puede ejecutar:El
stdout
o la salida del programa se puede redirigir utilizando>
para sobrescribir un archivo o>>
para agregarlo a un archivo. Por ejemplo, si desea iniciar sesiónyum
en un archivoyum.log
:O, si desea agregar la salida a un archivo existente
log
:Los errores se imprimen
stderr
y nostdout
, y se pueden redirigir a un archivo de la misma manera, pero usando2>
:Si desea redirigir ambos
stderr
ystdout
, puede usar&>
:fuente
Puede ejecutar un comando en segundo plano simplemente colocando un
&
signo después.Por ejemplo:
lo ejecutará en segundo plano.
Puede redirigir aún más el stdout / stderr a los archivos apropiados para que no aparezcan en su terminal mientras está haciendo algo.
Consulte esto para obtener más información: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
fuente
Intente usar el comando 'pantalla' antes de comenzar su tarea de ejecución prolongada, luego, cuando se desconecte, puede volver a conectarla con 'pantalla -r -d' cuando lo necesite nuevamente. Encuentro que cuando se usa un terminal a través de ssh u otras conexiones de red, a veces pueden romperse por una mala conexión al servidor. ejecutarlo dentro de una 'pantalla' soluciona este problema.
fuente