sviluppo-web-qa.it

È possibile staccare un processo dal suo terminale? (O, "Avrei dovuto usare lo schermo!")

Possibile duplicato:
Posso Nohup/schermare un processo già avviato?

Su Unix (in particolare Linux), ho iniziato un lavoro in una normale sessione ssh-> bash. Vorrei lasciare presto il lavoro, ma ora mi rendo conto che il lavoro richiederà diverse ore.

Se avessi appena iniziato questo lavoro sullo schermo, potrei staccarmi e tornare a casa. Ma non l'ho fatto.

C'è un modo per disconnettere il lavoro dalla sua sessione SSH, così posso spegnere il mio computer, (lasciando cadere la TCP e uccidere la sessione SSH), eppure il programma continua a funzionare?

Non mi interessa il suo output - in effetti, ho reindirizzato stdout a un file. Voglio solo che vada a buon fine.

146
mike

Puoi premere ctrl-z per interrompere il processo e quindi eseguire bg per farlo funzionare in background.

È possibile mostrare un elenco numerato di tutti i processi in background in questo modo con jobs.

Quindi puoi eseguire disown %1 (sostituisci 1 con il numero di processo emesso da jobs) per staccare il processo dal terminale.

Nonostante il nome, il processo sarà ancora di tua proprietà dopo aver eseguito disown, sarà solo staccato dal terminale in cui lo hai avviato.

Questa risposta contiene ulteriori informazioni

201
David Pashley

Credo che il comando che stai cercando sia "rinnegato"

21
Seigel
 Usa il comando 
 Nohup e 
 
 È bello: 
 Root @ index: ~ # Nohup/usr/bin/curl localhost/begemot.php & 
 [1] 894 
 Root @ index: ~ # Nohup: ignorando l'input e aggiungendo l'output a "Nohup.out" 
 
 E uscendo da questo terminale, un'attività continua per essere continuata ... 
13

Dall'interno della shell bash:

control+z

Quindi, per continuare a eseguire il processo in background:

bg

Successivamente, è possibile digitare jobs per vedere se il processo è ancora in esecuzione.

9
Joe

Quando si utilizza reptyr all'interno della schermata, è possibile spostare il processo (o il relativo output) nella schermata.

8
mab

Ho deciso di configurare screen per l'esecuzione automatica quando mi collego agli host che utilizzo regolarmente, per evitare questo problema.

http://tlug.dnho.net/?q=node/239 è un modo per farlo, anche se ci sono altre varianti là fuori.

Mi ha salvato una o due volte quando ho avuto una disconnessione inaspettata a metà sessione e altrimenti avrei dimenticato di iniziare screen prima di iniziare qualcosa di prolisso.

7
David Spillett

Usare crtl-Z quindi bg o usare & quando si esegue il comando non è affidabile al 100%. Funzionerà nella maggior parte dei casi ma potrebbe non funzionare come previsto in alcuni casi (utilizzo I/O, ...).
Screen è una soluzione affidabile.

6
radius

Se stai usando bash, puoi sospettare con control-Z e sfondo con bg.

Controllo lavoro (da man bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

aiuto bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the Shell's notion of the current
    job is used.

aiuto lavori

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.
5
Zoredache

Se sai in anticipo che vuoi che sia in esecuzione in background, il comando unix at è una buona opzione. Avvia i comandi in background all'ora pianificata, proprio come un cron job che non si ripete. A seconda della distribuzione, potrebbe essere necessario installarlo e avviare il demone atd.

4
Sylvain