2009-05-12 5 views

Respuesta

28

Hay dos maneras, idénticos en consecuencia.

  1. Utilice nohup al iniciar su programa. Por ejemplo, nohup example-command. Puede fondo y trabajar con eso normalmente; simplemente continuará ejecutándose después de que haya dejado de fumar.
  2. Como alternativa, as @alamar noted, si usa bash como su caparazón, puede usar el comando disown. Desafortunadamente, hasta donde yo sé, disown es específico de bash; si utiliza otro shell, como tcsh, puede estar restringido al formulario nohup anterior.
+0

zsh también admite rechazo. – alamar

+0

¡Ah, y ahora recuerdo, he usado 'nohup' en el pasado! –

+0

En la página man de bash, parece que se requiere la opción "-h" para ignorar SIGHUP - "renunciar -h". – NVRAM

7

En Zsh (no bash) se puede:

example-command &; disown {pid} 

o simplemente

example-command &; disown 
+2

El punto y coma después del signo & es un error de sintaxis. En bash, el PID es opcional y se necesita la "-h". Así que esto debería ser: "ejemplo-comando y repudio -h", pero esto no redirige a stdin/stdout/stderr. – NVRAM

+0

'ls &; desaprobación' funciona bien para mí en zsh. Si bash no es compatible con ninguno de ellos (; después de y/o desaprovecha sin parámetros), entonces: no me digas que no sabías que apesta. – alamar

+0

Estoy de acuerdo @NVRAM. Actualicé la respuesta para decir que funciona en Zsh pero no en bash. –

1

nohup ejemplo mando

1

También puede utilizar el 'at' or 'batch' commands y darle el tiempo actual.

+0

Me gusta este, pero rara vez lo uso. Y para simplificar simplemente use "ahora" (no es necesario averiguar la fecha/hora). – NVRAM

1

disown es un bash incorporado. Se puede crear un shellscript envoltorio para su comando como

#!/bin/bash 
$1 & 
P=`which $1` 
disown `pidof ${P}` 

No es el guión más robusta (por cualquier medio), pero puede ayudar a conseguir que va. Por ejemplo:

$./launch_script.sh myProgram 

También puede hacerlo en el origen del programa si lo está editando.

+0

Su ejemplo no maneja argumentos (use "$ @"). Puedes usar "$!" para el PID del último trabajo de fondo. Pero el PID no es necesario. Y debe ignorar SIGHUP así que use "nohup" o "reprender -h". – NVRAM

+0

Gracias NVRAM, hace un tiempo que hice cualquier shell scripting :) –

5

También podría considerar usar el comando screen.

+0

o su alternativa moderna, 'tmux'. –

11

Primero busque preguntas similares.

Además de los casos indicados anteriormente, se puede hacer:

setsid command_name 

Por ejemplo:

setsid xclock 

Gracias

+3

>> Por favor, busque las preguntas similares primero. * Lo hice. Señor. * –

-2

Run: Ejemplo de mando

Prensa: Control-Z

Ejecutar: bg

+0

Eso es lo mismo que ejecutar 'ejemplo-comando &', y eso no funcionó. 'example-command' se sigue ejecutando como un proceso secundario. –

+1

sugiero que use la pantalla a continuación. pantalla vi Control + d un [serán dettach] pantalla -r [se vuelva a conectar] Puede cerrar su terminal y volver días después y hacer lo -r pantalla con ese usuario. Puede tener varias sesiones con pantalla. – Eduardo

Cuestiones relacionadas