2009-05-12 24 views

risposta

28

Ci sono due modi, identici in risultato.

  1. Utilizzare nohup all'avvio del programma. Ad esempio, nohup example-command. Puoi fare lo sfondo e lavorarci normalmente; semplicemente continuerà a correre dopo che hai smesso.
  2. In alternativa, as @alamar noted, se si utilizza bash come shell, è possibile il comando disown. Sfortunatamente, per quanto ne so, lo disown è bash-specifico; se utilizzi un'altra shell, ad esempio tcsh, potresti essere limitato al modulo nohup in alto.
+0

zsh supporta anche disown. – alamar

+0

Oh, e ora ricordo, ho usato 'nohup' in passato! –

+0

Dalla pagina man di bash, sembra che l'opzione "-h" sia necessaria per ignorare SIGHUP - "disown -h". – NVRAM

7

In Zsh (non bash) è possibile:

example-command &; disown {pid} 

o semplicemente

example-command &; disown 
+2

Il punto e virgola dopo la e commerciale è un errore di sintassi. In bash il PID è opzionale, e "-h" è necessario. Quindi questo dovrebbe essere: "example-command & disown -h", ma questo non reindirizza stdin/stdout/stderr. – NVRAM

+0

'ls &; disown' funziona bene per me in zsh. Se bash non supporta nessuno di questi (; dopo di & o disown senza parametri), quindi: non dirmi che non sapevi che fa schifo. – alamar

+0

Sono d'accordo @NVRAM. Ho aggiornato la risposta per dire che funziona in Zsh ma non bash. –

1

nohup esempio-comando

1

È anche possibile utilizzare il 'at' or 'batch' commands e dargli l'ora corrente.

+0

Mi piace questo, ma raramente lo uso. E per semplificare basta usare "adesso" (non c'è bisogno di capire la data/ora). – NVRAM

1

disown è un built-in bash. Si potrebbe creare uno shellscript wrapper per il vostro comando, come

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

Non lo script più robusto (con qualsiasi mezzo), ma può aiutare a farti andare. Per esempio:

$./launch_script.sh myProgram 

Si può anche fare questo nel sorgente del programma se si sta modificando esso.

+0

L'esempio non gestisce gli argomenti (utilizzare "$ @"). Puoi usare "$!" per il PID dell'ultimo lavoro in background. Ma il PID non è necessario. E dovresti ignorare SIGHUP, quindi usa "nohup" o "disown -h". – NVRAM

+0

Grazie NVRAM, è stato un po 'di tempo da quando ho fatto uno script di shell :) –

5

Si potrebbe anche considerare l'utilizzo del comando screen.

+0

o la sua alternativa moderna, 'tmux'. –

11

Si prega di cercare prima le domande simili.

Oltre ai modi di cui sopra, si può fare:

setsid command_name 

Ad esempio:

setsid xclock 

Grazie

+3

>> Cerca prima le domande simili. * L'ho fatto. Sir. * –

-2

Run: ad esempio, il comando

Press: Control-Z

Esecuzione: bg

+0

È come eseguire 'example-command &', e questo non ha funzionato. 'example-command' è ancora eseguito come un processo figlio. –

+1

Ti suggerisco di usare la schermata quindi. schermo vi Control + d un [sarà dettach] screen -r [sarà ricollegare] È possibile chiudere il terminale e tornare giorni più tardi e fare la -r schermo con quell'utente. È possibile avere più sessioni schermate. – Eduardo

Problemi correlati