Come posso eseguire un comando dal terminale senza bloccarlo?


45

Eseguo molti programmi in Ubuntu dal terminale, ma vorrei poter continuare a utilizzare il terminale dopo aver aperto un programma. Come posso mettere i programmi in background in modo da non dover aprire un'altra finestra?

Risposte:


60

Esistono diversi modi per eseguire un programma terminale e continuare a utilizzare il terminale:

  • È possibile aprire un'altra scheda terminale (fare clic con il tasto destro, quindi selezionare "Apri nuova scheda").
  • È possibile aggiungere &al comando eseguito. Tenere presente che non verrà visualizzato l'output di testo sul terminale, ad esempio i messaggi di errore.
  • È possibile digitare Ctrl- Ze quindi eseguire bg. Questo ha lo stesso effetto della corsacommand &
  • È possibile eseguire, nohup command &quindi premere Invio. (Grazie a ccpizza , vedi i commenti qui sotto.)

Tuttavia, premendo Alt- F2e quindi eseguendo il comando dalla GUI di solito è considerata la migliore pratica - non esiste alcun terminale!

Si noti che quando si utilizza &(non nohup), la chiusura del terminale terminerà comunque l'applicazione a meno che non si esegua disownsuccessivamente .

EDIT: sembra come usarenohup a volte lascerà piccoli escrementi nella tua cartella home. Ciò che normalmente verrebbe registrato sul terminale apparentemente viene salvato in un file in ~ /.

~~

Un modo semplice per eseguire un programma in background è program-name & disown, che ti porterà su un terminale che può essere chiuso senza uccidere il processo.


4
Per evitare di interrompere il processo figlio dopo la chiusura del terminale, è possibile avviare l'app come nohup firefox&.
ccpizza,

Freddo! Non lo sapevo (ma dopo la sperimentazione, il terminale è ancora "bloccato")!
WindowsEscapist

non è "bloccato", ma solo "sembra" bloccato, se si digita enter una volta visualizzato un messaggio.
ccpizza,

Ah, non l'avevo notato prima.
Windows Escapist il

program-name & disownè una bella soluzione
Dottor Henry

8

È possibile eseguire il comando con un & dopo.

Per esempio:

thunderbird &

Vedi qui per maggiori informazioni.


Questo funziona solo fino alla chiusura della finestra del terminale, una volta chiusa la finestra il programma termina
kurdtpage

6

È possibile utilizzare setsidper eseguire il programma in una nuova sessione in aggiunta a &>/dev/nullcosì non riceverai alcun messaggio di registro.

Quindi sarebbe come

setsid program-name &>/dev/null


Freddo. Deve mantenere il processo in esecuzione quando si disconnette l'utente e la sessione corrente.
Mikhail Moskalev

1

Utilizzando il screencomando, è possibile aprire più sessioni del terminale utilizzando un'unica finestra e toccare

apt-get install screen (On Debian based Systems)

yum install screen (On RedHat based Systems)

screen (avvia una nuova schermata)

[Your command]

Ctrl+A d per lasciare lo schermo ... e così via

https://linuxize.com/post/how-to-use-linux-screen/


0

Puoi eseguirlo in un terminale virtuale come tmux(o screenma ho sentito che non è più mantenuto)

# This ataches your terminal to a virtual terminal
tmux
run_your_command
# This detaches your virtual terminal (previous command can be running)
CTRL-b d
run_other_commands # on your terminal
# re-attach the virtual terminal to see the status of run_your_command
tmux a

tmux puoi fare molto di più, come:

  • sposta il tuo terminale virtuale su un altro terminale
  • condividere il terminale virtuale in più terminali (gli altri utenti possono vedere cosa stai facendo ;-))
  • dividere lo "schermo" per avere più terminali.
  • ...

https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/

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.