[英]How to open multiple instances of a program in Linux
比如說,打開gedit
編輯器的多個實例我寫了一個像這樣的shell腳本 -
gedit&
gedit&
gedit&
gedit&
但是在我運行我的shell腳本./example.sh
,我只能找到一個gedit實例! 我甚至使用了&
運算符,因此shell不會等待一個實例完成。 我仍然看不到四個gedit
實例。
我也直接從命令提示符處嘗試。 如果我只是在命令行輸入gedit&
,它顯示1906
(這是新創建的gedit
進程的PID),啟動一個新的gedit
實例並再次返回提示。 當我在命令行輸入gedit&
時,它這次顯示了1909
,但是沒有新的gedit實例! 我也無法在系統監視器中找到任何帶有PID 1909
進程。 這個新流程在哪里消失了?
gedit
特有的事情發生了嗎? 如果是這樣,創建程序的多個實例時的一般行為是什么?
它特定於gedit。 你可能正在尋找gedit --new-window &
。
來自man gedit
:
--new-window Create a new toplevel window in an existing instance of gedit.
這似乎特定於gedit,也許有一些選項可以關閉正在運行的實例的檢查。
我來到這里,試圖開始多個大膽的實例。
僅允許一個實例實際上更難實現,因為程序需要查找已經運行的實例並與之通信。 這是通過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:
scite -check.if.already.open=false &
在腳本中使用它。 我發現它可以滿足我的需求:
#!/bin/bash
xterm -e "gedit; bash" &disown
看起來gedit首先尋找正在運行的實例,而忽略了進一步的啟動請求(只是一個瘋狂的猜測)。 但是手冊頁說,你可以打開另一個窗口:
--new-window
Create a new toplevel window in an existing instance of gedit.
這並不能完全解決你的問題,但也許這就是你首先要尋找的東西。
祝你好運,Alex。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.