GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit GUI linuxové programy z příkazového řádku, ale odděleně od příkazového řádku?

Připojte & na příkazový řádek:

emacs &

Toto přepne emacs na pozadí a umožní vám pokračovat v používání vašeho terminálu.

Všimněte si, že to stále ponechá emacs jako dílčí proces vašeho terminálu, a když terminál opustíte, ukončí se také emacs. Chcete-li se tomu vyhnout, zadejte:

(emacs &)

Závorky říkají terminálu, aby odpojil proces emacs od terminálu.

Přesto se zprávy stdout a stderr z programu zobrazí na terminálu. Chcete-li tomu zabránit, použijte:

(emacs &> /dev/null &)

Použijte nohup .Takto:nohup amarok &

Doufám, že to pomůže.


Zveřejnil jsem odpověď na starší vlákno podobného tématu s odpověďmi z různých zdrojů. Následuje kopie této odpovědi upravená pro toto vlákno.

Následující práce:

$ (gui_app &> /dev/null &)

Toto je odpověď Nathana Fellmana plus přesměrování.

"&> /dev/null" přesměruje stdout i stderr na null zařízení. Poslední ampersand způsobí, že proces běží na pozadí. Závorky kolem příkazu způsobí, že vaše aplikace „gui_app“ bude spuštěna v podshell.

Tím odpojíte proces „gui_app“ od konzole, ze které tento příkaz spouštíte. Takže i když zavřete okno, ve kterém je spuštěn emulátor nadřazeného terminálu, "gui_app" se nezavře. Spustil jsem to, pak jsem se podíval na strom procesů pomocí příkazu "pstree" a zjistil jsem, že aplikace spuštěná tímto způsobem se stane podřízeným procesem pro "iniciaci".

Například,

$ gui_app &> /dev/null &

spustí aplikaci na pozadí, ale stane se podřízeným procesem procesu konzoly a ukončí se, když zavřete terminál. (I když opuštění terminálu pomocí bash pomocí příkazu exit nebo Ctrl-D umožní bash vyčistit předáním procesu na pozadí init.)

"nohup" funguje tak, jak navrhl NawaMan, ale ve výchozím nastavení přesměruje výstup a chybu do souboru. Jak odpověděl JeffG, příkaz "disown" (pokud je dostupný v prostředí shell) může odpojit proces od terminálu poté, co spustíte proces na pozadí:

$ gui_app &
$ disown

(BTW toto vše platí pro bash. Jsem si jistý, že ostatní shelly mají jiné metody/syntaxi, jak to udělat.)

Některé odkazy:Disowning Processes (UNIX Power Tools)

Pokud se jedná o jednoduché volání do GUI aplikace – bez složitých možností a podobně – zdá se, že použití spouštěče jako „gmrun“ nebo dmenu (varování:hlasitý zvuk) je také dobrá volba. Spojte jej s kombinací kláves. Spouštěč zatím nepoužívám, ale vyzkoušel jsem tyto dva.

POZNÁMKA:CarlF v komentářích k jinému vláknu hlásí GUI aplikace spuštěné pomocí metody "gui_app &" se nezavřou, když opustí nadřazený terminál. Myslím, že jsme terminál zavírali různými způsoby. Zavíral jsem okno, ve kterém běžel emulátor terminálu. Myslím, že možná opouštěl emulátor terminálu přes shell (příkaz exit nebo Ctrl-D). Testoval jsem to a viděl jsem, že odchod přes bash nezastaví GUI spuštěné jako proces na pozadí terminálu, jak říká CarlF. Zdá se, že když je mu dána příležitost k vyčištění, dejte ruce pryč od procesů na pozadí, aby se spustil. Ve skutečnosti to musí být mechanismus, kterým se proces na pozadí spuštěný v subshell předá init.


Linux
  1. Jak vyvolat makro Openoffice z příkazového řádku Linuxu?

  2. Boot zaseknutý – jak spustit Gui z příkazového řádku?

  3. Jak mohu odeslat zprávu na můj socket.io websocket z příkazového řádku v linuxu?

  1. Jak spustit příkaz Linux na pozadí a odpojit proces v terminálu

  2. Jak mohu zkopírovat složku z příkazového řádku systému Linux?

  3. jak vygenerovat náhodnou MAC adresu z příkazového řádku Linuxu

  1. Jak nainstalovat software z příkazového řádku Linuxu

  2. Jak spouštět dotazy MySQL/MariaDB přímo z příkazového řádku Linuxu

  3. Jak vyhledávat na webu z terminálu v systému Linux