Come si avvia un comando bash che non si chiude sul terminale?

2

Voglio eseguire un comando e non farlo chiudere quando il terminale si chiude.

Ad esempio, se eseguo top & ; disown , top si chiude quando esco da Terminal. Voglio mantenere top vivo.

So che questo è possibile poiché il comando open può farlo. (Ad esempio, open -e apre TextEdit e quando esci da Terminal, TextEdit rimane aperto.)

Grazie in anticipo.

    
posta Flare Cat 07.09.2016 - 22:19
fonte

4 risposte

3

Utilizza lo schermo :

Per avviare una sessione e un processo all'interno dell'esecuzione screen command (ad esempio screen top ). Scollegati dalla sessione con ctrl A ctrl D .

Ora puoi chiudere la finestra della sessione di Terminale o chiudere il Terminale e il processo avviato in precedenza è ancora in esecuzione.

Dopo (ri) iniziare Terminal puoi ottenere un elenco di tutte le sessioni distaccate con screen -list . Usa il pid per ricollegare a una sessione: screen -R [pid] . Per interrompere il processo della sessione ricollegata usa i comandi comuni (ad esempio ctrl C per top ) e exit per interrompere la sessione.

Se si desidera avviare un processo in una nuova sessione immediatamente distaccata, utilizzare: screen -d -m command (ad esempio screen -d -m top ). Questo creerà una nuova sessione di schermate mentre ricevi una nuova richiesta nella sessione di shell attualmente aperta.

Controlla man screen per una lunga descrizione, associazioni di tasti e personalizzazioni.

    
risposta data 07.09.2016 - 23:49
fonte
2

Penso che la chiave qui sia basata su questa affermazione:

For instance, if I run top & ; disown, top quits when I quit Terminal. I want to keep top alive.

Nel momento in cui esci da Terminal, uccide immediatamente qualunque cosa tu stavi correndo. È qui che entrano in gioco multiplexer terminali .

La soluzione a questo è usare tmux .

tmux è un "multiplexer terminale" ma una delle migliori caratteristiche al riguardo è che continua a funzionare anche se chiudi Terminale.

Dalla loro pagina man :

tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.

Quindi, se vuoi lanciare top , puoi scollegarlo da esso mentre continua in background anche se Terminate si chiude.

tmux è disponibile attraverso homeberew e MacPorts .

  • HomeBrew: sudo brew install tmux
  • MacPort: sudo port install tmux

Informazioni dettagliate sull'installazione sono disponibili sui rispettivi siti.

Per quanto riguarda l'utilizzo di tmux , avvia semplicemente Terminal ed esegui tmux . Otterrai una schermata del terminale con una barra verde.

Esegui(adesempio)top.

EscieriavviaTerminal.

Perottenereunelencodisessioni:

tmuxlist-sessions

0:1windows(createdWedSep718:13:212016)[132x24]

Collegatiaquellasessionespecifica

tmuxattach-t0Elasessionevieneripristinata.

    
risposta data 08.09.2016 - 00:24
fonte
0

Quando usi un comando che vuoi continuare normalmente aggiungere qualcosa all'effetto di:

nohup yourcommand &

Il nohup smette di ricevere segnali di blocco e il & essenzialmente lo fa in modo che tu possa continuare a fare le tue cose.

Spero che ti aiuti!

    
risposta data 07.09.2016 - 22:51
fonte
-1

Alcuni programmi vengono avviati come un processo figlio della finestra Terminale, quindi chiudendo chiuderà il programma. In tal caso, avviare tali programmi su un processo separato di conseguenza:

  1. Inserisci il percorso completo dell'eseguibile nella riga di comando (/ Applicazioni / Safari.app / Contenuti / MacOS / safari )

  2. Usa il comando open e il flag appropriato, come -a per app ( open -a Safari ), che avvia le applicazioni in un processo separato ( pid). Una volta eseguito, puoi semplicemente chiudere la finestra del terminale e l'applicazione rimarrà aperta, invece di usare l'esecuzione eseguibile diretta con qualunque mezzo tu stia utilizzando.

  3. Il comando "osascript", che è il comando Terminal di OS X per l'esecuzione di script "open scripting architecture" come AppleScript ( osascript -e 'apri l'app "Safari"' ).

Tutti e tre hanno un mezzo separato per abbandonare i processi, ma che sono simili a ciascuno dei rispettivi mezzi per avviarli.

Ricorda che questi non sono gli unici tre, ma piuttosto i comandi più arcani a tua disposizione. Fornisco loro perché ritengo che chiunque esegua comandi nel terminale abbia già familiarità con ogni singolo comando disponibile in tutte le distribuzioni UNIX / Linux / FreeBSD standard, e prontamente sa come usare quelli rilevanti per generare, uccidere, sospendere, fork , riprendere, unire e staccare thread e processi, essendo l'unica ragione di esistenza di FreeBSD come sistema operativo installato sulle macchine dell'azienda più redditizia del mondo.

Ad ogni modo, un'ultima cosa: solo l'utente corrente può eseguire processi usando i comandi precedenti; avviare processi con questi comandi con un altro utente, è necessario abilitare l'account super utente ( su ), quindi prefisso ogni comando con sudo .

    
risposta data 08.09.2016 - 03:37
fonte

Leggi altre domande sui tag