2011-09-26 305 views
2

比方說,開gedit編輯器的多個實例,我寫了一個shell腳本像這 -如何在Linux中打開一個程序的多個實例

gedit& 
gedit& 
gedit& 
gedit& 

但之後我跑我的shell腳本./example.sh,我可以只找到一個gedit實例!我甚至使用了&運算符,因此shell不會等待一個實例完成。但我仍然看不到gedit的四個實例。

另外,我直接從命令提示符嘗試。如果我只是在命令行上輸入gedit&,它會顯示1906(這是新創建的gedit進程的PID),啓動了一個新的gedit實例並返回到再次提示。當我在命令行鍵入gedit&時,這次顯示1909,但沒有新的gedit實例!我也無法在系統監視器中找到PID 1909的任何進程。這個新過程何去何從?

特定於gedit的發生情況?如果是這樣,創建一個程序的多個實例時的通用行爲是什麼?

回答

4

它是特定於gedit。您可能正在尋找gedit --new-window &

man gedit

--new-window 
     Create a new toplevel window in an existing instance of gedit. 
+0

我不知道如何接受這個答案。 OP特別說他想要多個實例,並且這個答案明確指出它將在現有實例中打開一個窗口... – pooley1994

+0

OP碰到了[XY問題](http://meta.stackexchange.com/questions/ 66377 /什麼,是最XY-問題)。 我想這個問題的標題應該已經更新,以提及gedit,而不是談論一個通用的「程序」。這種方式被誤認爲是錯誤的。 但是,如果你想運行多個事物的事情,閱讀OP的嘗試應該足夠啓發。 – etuardu

3

這似乎是特定於gedit,也許有一些選項關閉檢查正在運行的實例。

+2

'gedit --new-window' – wormsparty

+0

不僅僅是gedit,大量的應用程序,實際上。例如,大多數瀏覽器將檢查正在運行的實例,並且只有在找到實例時纔打開新的選項卡。 @Pavan Manjunath你必須檢查gedit的'man',它很可能有一個像'--new-instance'或類似的參數,你需要傳遞一個新窗口。 – TC1

+0

這就是我的意思,只是特定於他嘗試運行的應用程序,而不是與shell相關的東西:) – jpjacobs

1

看起來像gedit中首先尋找一個運行實例,並簡單地忽略進一步啓動請求(只是胡亂猜測)。但是手冊中提到,您可以打開另一扇窗:

--new-window 
       Create a new toplevel window in an existing instance of gedit. 

這將不完全解決你的問題,但也許這就是你要找的人在首位。你好, 亞歷克斯。

1

我來到這裏,試圖啓動大膽的多個實例。

只允許一個實例實際上很難實現,因爲程序需要查找已經運行的實例並與之通信。這是通過D-Bus完成的。爲了避免與已經開始溝通例如,你可以在另一個d-Bus的會話中運行該程序:

 
nohup dbus-run-session audacious & 
nohup dbus-run-session audacious & 

注:nohup的將保持程序運行,即使在終端將被關閉。

該方法也適用於其他不允許用戶在多個實例與一個實例之間進行選擇的程序。

請注意,如果多個實例訪問相同的配置文件,則可能會引入錯誤。

用xfce 4.10.1和dbus 1.8測試。16-1

對於賽特:

scite -check.if.already.open=false & 
1

在腳本中使用此。我發現它可以滿足我的需求:

#!/bin/bash 
xterm -e "gedit; bash" &disown 
相關問題