Di 'che inizi il lavoro in questo modo
foo
e poi desidero che tu voglia metterlo in background. Digitando Ctrl+ Ze poi bgfa il trucco, ma si bloccherà footra Ctrl+ Ze bg. Come posso posizionare foo in background senza prima congelarlo?
Di 'che inizi il lavoro in questo modo
foo
e poi desidero che tu voglia metterlo in background. Digitando Ctrl+ Ze poi bgfa il trucco, ma si bloccherà footra Ctrl+ Ze bg. Come posso posizionare foo in background senza prima congelarlo?
Risposte:
Tecnicamente foofunziona già in background. È possibile avviare una seconda sessione terminale e la prima continuerà a funzionare foomentre si eseguono altre operazioni.
In X, ciò implica semplicemente l'avvio di una seconda applicazione terminale o l'apertura di un'altra scheda se l'emulatore di terminale scelto ha tali funzionalità.
Sulla console, se non l'hai pianificato, dovrai passare a un altro terminale virtuale ed eseguire nuovamente l'accesso.
Se usi un terminale multiplexer come screeno tmuxpuoi avviare un'altra sessione al suo interno. Ad esempio, sullo schermo, questo viene fatto usando Ctrl+ Aimmediatamente seguito da Ctrl+ C. Per passare da una all'altra, usare Ca Cn e Ca Cp per andare avanti e indietro tra le sessioni terminali.
foo stesso (assente controllo specifico, che immagino in natura sia da qualche parte tra raro e inesistente) non importa se sta funzionando nella finestra più in alto o anche se c'è qualcosa che mostra il suo output.
foofunziona già in background" ... solo ... No. Tecnicamente.
foocosì ora cosa devo fare?". Se ritieni che questa risposta (o altre risposte) non sia utile nel rispondere alla domanda, ti incoraggio a esercitare i tuoi privilegi di voto , nonché a lasciare una tua risposta alla domanda da quello che ritieni sia l'angolazione corretta, piuttosto che discutendo di una delle risposte lasciate sulla domanda. Forse pensi che la risposta di l0b0 sia migliore, ma la mia risposta offre un modo di fare almeno all'incirca ciò che l'OP vuole.
L'invio di un'applicazione dal primo piano allo sfondo richiede la cooperazione sia dal terminale che dalla shell. Il terminale non può farlo da solo, poiché la shell deve impostare il gruppo di processi in primo piano. La shell non può farcela da sola, perché il terminale deve elaborare la pressione del tasto (la shell non è in primo piano, quindi non può ricevere una pressione del tasto).
Ho una configurazione zsh in cui posso premere Ctrl+ Zdue volte in rapida successione; la prima stampa sospende il processo e la seconda lo riprende in background. Non so come portarlo a Bash.
Se stai eseguendo un emulatore di terminale che ti consente di iniettare i tasti, puoi iniettare ^Zbg^M(usando la ^notazione per i caratteri di controllo). Ad esempio, con un emulatore di terminale X11, eseguire xdotool --window 1234 Ctrl_L+Z b g Returndove 1234 è l'ID della finestra dell'emulatore di terminale. Con Schermo, esegui screen -S foo -p 12 -X stuff $'\032bg\r'dove si footrova il nome della sessione schermo e 12l'ID della finestra.
Se la digitazione non è abbastanza rapida per il caso, eseguire kill -s SIGSTOP 1023 && kill -s SIGCONT 1023da un'altra shell, supponendo 1023 come PID di destinazione.
NOTA BENE: Come probabilmente sapeva Ruslan , quella sequenza riavvia il lavoro così rapidamente bashche non se ne accorge.