簡體   English   中英

如何在Linux中打開程序的多個實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM