Come posso mettere in background il processo Linux in esecuzione? [chiuso]


111

Ho un comando che carica i file usando git su un server remoto dalla shell di Linux e ci vorranno molte ore per finire.

Come posso mettere quel programma in esecuzione in background? In modo che posso ancora lavorare sulla shell e anche quel processo viene completato?


Solo una supposizione ma hai provato ctrl + z o hai eseguito il comando in questo modo; #command &
EralpB

Il comando è già in esecuzione, quindi non ho altre opzioni. Non sono sicuro di quale comando provare. Non volevo interrompere il processo attuale, quindi non l'ho sperimentato
Mirage

Allora dovremmo aspettare una risposta più professionale :) Volevo dire se avessi avuto la possibilità di ricominciare tutto da capo. (The command & thing)
EralpB

Chi ha risposto a questa domanda spiega i tre passaggi che devono essere
eseguiti

Puoi anche aprire una seconda istanza di putty e connetterti di nuovo al server per ottenere un'altra shell. Anche se la soluzione con ctrl+zè ottima.
Ela782

Risposte:


207

Sospendi il processo con CTRL + Z quindi usa il comando bgper riprenderlo in background. Per esempio:

sleep 60
^Z  #Suspend character shown after hitting CTRL+Z
[1]+  Stopped  sleep 60  #Message showing stopped process info
bg  #Resume current job (last job stopped)

Maggiori informazioni sul controllo e l' bgutilizzo del lavoro nella bashpagina del manuale:

CONTROLLO LAVORI
Digitando la sospensione carattere di (tipicamente ^ Z, Control-Z) mentre un processo è in esecuzione, il processo viene arrestato e restituisce il controllo a bash. [...] L'utente può quindi manipolare lo stato di questo lavoro, utilizzando il comando bg per continuarlo in background, [...]. A ^ Z ha effetto immediato e ha l'ulteriore effetto collaterale di causare l'eliminazione dell'output in sospeso e dell'intestazione del tipo.

bg [ jobspec ...]
Riprendi ogni lavoro sospeso jobspec in background, come se fosse stato avviato con &. Se jobspec non è presente, viene utilizzata la nozione della shell del lavoro corrente .

MODIFICARE

Per avviare un processo in cui puoi persino uccidere il terminale e continua a funzionare

nohup [command] [-args] > [filename] 2>&1 &

per esempio

nohup /home/edheal/myprog -arg1 -arg2 > /home/edheal/output.txt 2>&1 &

Per ignorare semplicemente l'output (non molto saggio) cambia il nome del file in /dev/null

Per ottenere il messaggio di errore impostato su un file diverso, modificare il &1nome del file.

Inoltre: è possibile utilizzare il jobscomando per visualizzare un elenco indicizzato di tali processi in background. E puoi terminare un processo in background eseguendo kill %1o kill %2con il numero come indice del processo.


L'ho provato ma poiché sta emettendo qualcosa, è tornato in primo piano con% che mostra la quantità di dati caricati
Mirage

Il processo scriverà qualsiasi output sul terminale come hai indicato al processo di farlo all'inizio. Dovrai riavviarlo per ottenere l'output da scrivere su file o /dev/null. Vedi modifica sopra.
Ed Heal

quindi significa che, se il processo è già avviato, non è possibile reindirizzare l'uscita
Mirage

Si Certamente. Non è possibile effettuare il processo solo sulla shell da cui è in esecuzione. Potresti fare un kill -9 <pid of your shelle poi il processo verrà ancora eseguito e l'output verrà gettato via, ma dovrai accedere di nuovo per avviare una nuova shell.
Ed Heal

È inoltre possibile utilizzare il disowncomando se è necessario disconnettersi dalla sessione del terminale e si desidera che continui a funzionare.
kirk roerig
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.