Come impostare il comando in background, chiudere il terminale e riportarlo su fg?


10

Sto cercando di scoprire come eseguire un comando in background e poi portarlo in primo piano più tardi. Sono stufo di tutorial e risposte in cui le persone affermano che è semplice, basta aggiungere &alla fine del comando per farlo funzionare in background. Funziona solo all'interno di una singola finestra del terminale. Voglio mettere il comando in background in un terminale e riportarlo in primo piano dopo aver riaperto il terminale

Esempio:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

Naturalmente dopo la chiusura del terminale non viene trovato alcun lavoro.

Prossimo esempio:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

Che cosa ho fatto di sbagliato? Qualcuno potrebbe spiegarmi come eseguire il comando in background e riportarlo in primo piano.

Risposte:


11

È impossibile nel modo desiderato.

Rivediamo alcuni concetti di base:

  • Un gruppo di processi è una raccolta di processi correlati che possono essere tutti segnalati contemporaneamente.
  • Una sessione è una raccolta di gruppi di processi, che sono collegati a un singolo dispositivo terminale (noto come terminale di controllo) o non collegati a nessun terminale.

Se hai chiuso il terminale, tutti i processi nella sessione sono morti tranne quelli (daemon) reintegrati nel processo di init. E non c'è modo di restituire loro un terminale di controllo.

In una parola, la ripartizione dei processi è fortemente limitata nei sistemi POSIX (la demonizzazione è un'eccezione) e le vostre esigenze non possono essere soddisfatte.


6
Tecnicamente questa è la risposta corretta, ma credo che i visitatori che hanno questo problema troveranno la "loro soluzione" nelle altre risposte che menzionano screen / byobu / tmux.
Programmatore

Hai ragione .., ma dal mio punto di vista, i concetti di base sono più importanti per capire meglio il funzionamento del sistema e capire cosa vuoi e sbagli. Grazie ad entrambi!
Timur Fayzrakhmanov,

16
  1. Installa screen:

    sudo apt-get install screen
  2. Inizio screen:

    screen -S session_name
  3. Esegui i tuoi comandi ciò di cui hai bisogno.

  4. Staccare screendal terminale (i tuoi comandi saranno ancora in esecuzione):

    Premi CTRL+ a+d

  5. Chiudi il terminale

  6. Apri un altro terminale e ricollega l'ultima screensessione:

    screen -r

Per ulteriori informazioni e opzioni extra per screencercare man screen.


2
Schermo o byobu (specialmente se stai usando Ubuntu). Byobu si basa sullo schermo se ho ragione, ma trovo che abbia funzionalità extra che trovo utili e più facili da usare, ma è una questione di opinione.
Programmatore

Grazie buon suggerimento! Forse sarà necessario nella funzione!) Dalla Russia con amore <3
Timur Fayzrakhmanov,

@Programster, sì, Byobu è ex. schermo. Ha sia byobu-screen che byobu-tmux.
user.dz,

1
Raccomando tmuxin alternativa a screen.
Gerrit,

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.