題 從Linux終端啟動GUI程序可防止進一步使用


我會搜索這個,但我不知道如何用它來搜索引擎..

基本上,當我從終端窗口啟動一個gui程序時,在我退出程序之前,該終端無法繼續使用。我剛剛開始使用dwm,並且我不想在啟動一些圖形程序後亂丟無用的終端..有什麼方法可以解決這個問題嗎?


4
2017-10-27 19:23


起源




答案:


每個人都說使用“&”是對的。如果你碰巧忘了,鍵入^ Z(ctrl + Z)暫停程序,然後“bg”告訴shell在後台運行它。這使得shell完全交互,就像你用“&”啟動程序一樣。


10
2017-10-27 19:57





我意識到這是一個舊線程,但我記得找到比這裡列出的更精細的解決方案。

$ (gui_app &> /dev/null &)

“&> / dev / null”將stdout和stderr重定向到空設備。最後一個&符號使進程在後台運行。命令周圍的括號將使您的“gui_app”在子shell中運行。

執行此操作將從執行此命令的控制台中分離“gui_app”進程。因此,即使您關閉窗口父終端模擬器正在運行,“gui_app”也不會關閉。我運行它然後用“pstree”命令查看進程樹,發現以這種方式啟動的應用程序將成為子進程“init”。

例如,

$ gui_app &> /dev/null &

將在後台運行該應用程序,但它將成為控制台進程的子進程,並將在您關閉終端時終止。 (雖然通過使用exit命令或Ctrl-D通過bash退出終端,但是通過將後台進程交給init來讓bash清理。)

或者,您可以使用“nohup”,但默認情況下會將輸出和錯誤重定向到文件。 “disown”命令(如果在shell中可用)可以在啟動後台進程後從終端分離進程:

$ gui_app &
$ disown

(BTW所有這些都適用於bash。我確定其他shell有其他方法/語法來執行此操作。)

類似的超級用戶問答 - 也許我記得以下的一些答案: ...從命令行啟動GUI linux程序,但是與命令行分開?

一些參考: Disowning Processes(UNIX電動工具)

如果它是對GUI應用程序的簡單調用 - 沒有復雜的選項等 - 它似乎使用像“gmrun”這樣的啟動器或者 dmenu (警告:響亮的音頻)也是一個不錯的選擇。將它綁定到一個組合鍵。我還沒有使用發射器,但嘗試了這兩個。

注意:評論報告中的CarlF通過“gui_app&”方法啟動的GUI應用程序在退出父終端時不會關閉。我認為我們以不同的方式關閉終端。我正在關閉終端模擬器運行的窗口。我想他可能已經通過shell退出終端模擬器(退出命令或Ctrl-D)。我測試了這一點,看到通過bash退出並沒有停止GUI作為終端的後台進程開始,如CarlF所說。當它有機會清理時,它似乎會將後台進程轉發給init。實際上,這必須是子shell中後台進程切換到init的機制。


5
2018-04-03 03:59



通常,如果您在後台運行來自shell的GUI應用程序,則關閉shell不會關閉應用程序。 - CarlF
@CarlF我不知道你的系統是如何設置的,但我在gnome-terminal上使用bash。如果我運行“emacs&”然後關閉控制台,則emacs退出。 - EMPraptor
@EMPraptor,我剛剛測試過,無論是使用xterm還是GNOME終端(以及bash作為shell),我都可以啟動程序(例如gedit,oowriter,firefox)並關閉父終端而無需關閉GUI應用程序。 Ubuntu Lucid Lynx,都有默認的GNOME會話和icwem。我沒有安裝emacs來測試。 - CarlF
@CarF不通過shell關閉終端(例如“exit”或Ctrl-D),而是使用您選擇的窗口管理器方法關閉託管終端的窗口。例如,Gnome / KDE上的“X”關閉窗口按鈕或dwm上的“alt-shift-C”。您的shell不會分離子進程,並且您通過“gedit&”方法啟動的GUI應用程序將關閉。 - EMPraptor
@CarlF感謝您指出當您通過bash退出時後台進程不會停止。我從來沒有嘗試通過bash退出終端來測試這個問題。我編輯了我的答案以反映這一點。 - EMPraptor


您需要在後台啟動應用程序,如下所示:

# xeyes &

 表示應用程序應在後台啟動。


3
2017-10-27 19:35





放一個&符號(&)在命令之後,它將把它放在後台,允許你使用終端,例如:

nautilus / home / john&

1
2017-10-27 19:34





嘗試

$>FooBargGui &

這將告訴shell啟動進程/ gui FooBarGui作為後台進程並立即返回提示。


0
2017-10-27 19:34





您可能希望將命令的任何輸出重定向到/ dev / null,以及它的背景。 IIRC:

command > /dev/null 2>&1 &

當我使用運行Linux的Sharp Zaurus PDA(以及IIRC,我使用OpenBox窗口管理器)時,我有一個名為q的bash文件,用於“快速安靜地排隊”。然後你可以跑,說:

q mycommand param1 param2

我相信這是腳本的工作方式:

#!/bin/bash

$@ > /dev/null 2>&1 &

0
2017-10-27 20:10



是的,正確答案。如果您對某些程序進行後台處理,您仍然可以使用該終端,但是關閉終端窗口將導致終端掛起或退出GUI程序。 - Lee B