4 votos

¿Cómo se inicia un comando bash que no se cierra al salir del Terminal?

Quiero ejecutar un comando y que no se cierre cuando se cierre el Terminal.

Por ejemplo, si ejecuto top & ; disown , top se cierra cuando yo salgo de la Terminal. Quiero mantener top vivo.

Sé que esto es posible ya que el comando open puede hacer esto. (Por ejemplo, open -e abre TextEdit, y cuando sale de Terminal, TextEdit permanece abierto).

Gracias de antemano.

1 votos

¿Por qué? No hay nada que ver si el proceso no está conectado a un terminal/

0 votos

top era sólo un comando de ejemplo. Yo usaría un comando diferente que no muestra nada.

0 votos

Entonces no veo ningún problema. Si el comando no emite nada ni acepta ninguna entrada, debería funcionar. La aplicación Terminal.app puede indicar que está cerrando el proceso, pero el proceso continúa ejecutándose después de salir de la aplicación Terminal.app. Probado en OS X 10.6.

4voto

klanomath Puntos 19587

Utilice pantalla :

Para iniciar una sesión y un proceso dentro de la ejecución screen command (por ejemplo screen top ). Desconectarse de la sesión con ctrlActrlD .

Ahora puede cerrar la ventana de la sesión de Terminal o salir del todo de Terminal y el proceso iniciado anteriormente sigue en marcha.

Después de (re)iniciar Terminal puede obtener una lista de todas las sesiones desprendidas con screen -list . Utilice el pid para volver a conectarse a una sesión: screen -R [pid] . Para detener el proceso de la sesión reatada utilice los comandos comunes (por ejemplo ctrlC para top ) y exit para detener la sesión.

Si desea iniciar un proceso en una nueva sesión inmediatamente separada, utilice screen -d -m command (por ejemplo screen -d -m top ). Esto creará una nueva sesión de pantalla mientras usted obtiene un nuevo prompt en su sesión de shell actualmente abierta.

Por favor, compruebe man screen para una larga descripción, enlaces de teclas y personalizaciones.

4voto

Douglas Puntos 10417

Creo que la clave aquí se basa en esta afirmación:

Por ejemplo, si ejecuto top & ; disown, top se cierra cuando salgo de Terminal. Quiero mantener top vivo.

En el momento en el que sales de Terminal, inmediatamente mata lo que estabas ejecutando. Aquí es donde multiplexores de terminal entran en juego.

La solución a esto es utilizar tmux .

tmux es un "multiplexor de terminales", pero una de sus mejores características es que sigue funcionando incluso si cierras el Terminal.

De su man página:

tmux es un multiplexor de terminales: permite crear, acceder y controlar varios terminales desde una sola pantalla. tmux puede separarse de una pantalla y seguir ejecutándose en segundo plano, para luego volver a conectarse.

Por lo tanto, si quiere lanzar top , puedes desprenderte de él mientras continúa en segundo plano incluso si Terminal está cerrado.

tmux está disponible a través de homeberew y MacPorts .

  • Cerveza casera: sudo brew install tmux
  • MacPorts: sudo port install tmux

Puede encontrar información detallada sobre la instalación en sus respectivos sitios web.

En cuanto al uso de tmux Simplemente inicie el Terminal y ejecute tmux . Obtendrá una pantalla de Terminal con una barra verde.

enter image description here

Ejecutar (por ejemplo) top .

enter image description here

Salga y vuelva a iniciar el Terminal.

Para obtener una lista de sesiones:

tmux list-sessions

0: 1 windows (created Wed Sep  7 18:13:21 2016) [132x24]

Adjuntar a esa sesión específica

tmux attach -t0 Y la sesión vuelve a funcionar.

enter image description here

2voto

PDL Puntos 31

Cuando se utiliza un comando que se quiere continuar, normalmente se añade algo del tipo

nohup yourcommand &

El nohup impide que reciba señales de cuelgue, y el & esencialmente lo ejecuta en segundo plano para que puedas seguir haciendo tus cosas.

Espero que eso ayude.

0voto

James Bush Puntos 109

Algunos programas se lanzan como un proceso hijo de la ventana de la Terminal, por lo que al cerrarla se cerrará el programa. En ese caso, lance dichos programas en un proceso separado como corresponde:

  1. Introduzca la ruta completa del ejecutable en la línea de comandos (/Applications/Safari.app/Contents/MacOS/safari )

  2. Utilice el Abrir y la bandera apropiada, como -a para app ( abrir -a Safari ), que lanza las aplicaciones en un proceso separado (pid). Una vez que se ejecuta, puede simplemente cerrar la ventana de la Terminal y la aplicación permanecerá abierta, a diferencia de la ejecución directa por cualquier medio que esté utilizando ahora.

  3. El comando "osascript", que es el comando de Terminal de OS X para ejecutar "arquitectura de scripting abierta" scripts como AppleScript ( osascript -e 'abrir aplicación "Safari"' ).

Los tres tienen un medio separado para salir de los procesos, pero que son similares a cada uno de sus respectivos medios para iniciarlos.

Ten en cuenta que no son los tres únicos, sino los comandos más arcanos que tienes a tu disposición. Los proporciono porque creo que cualquiera que ejecute comandos en la terminal ya está familiarizado con todos y cada uno de los comandos disponibles en cada distribución estándar de UNIX/Linux/FreeBSD, y sabe fácilmente cómo utilizar los pertinentes para generar, matar, suspender, bifurcar, reanudar, unir y separar hilos y procesos, siendo ésta la única razón de ser de FreeBSD como sistema operativo instalado en las máquinas de la compañía más rentable del mundo.

De todos modos, una última cosa: sólo el usuario actual puede ejecutar procesos utilizando los comandos anteriores; lanzar procesos con estos comandos bajo un usuario diferente, debe habilitar la cuenta de superusuario ( su ), y luego anteponer a cada comando sudo .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X