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.