如何在Linux中打开程序的多个实例

时间:2011-09-26 10:00:44

标签: linux bash shell command-line

比如说,打开gedit编辑器的多个实例我写了一个这样的shell脚本 -

gedit&
gedit&
gedit&
gedit&

但是在运行我的shell脚本./example.sh后,我只能找到一个gedit实例!我甚至使用了&运算符,因此shell不会等待一个实例完成。我仍然看不到gedit的四个实例。

我也直接从命令提示符处尝试。如果我只是在命令行中输入gedit&,它会显示1906(这是新创建的gedit进程的PID),启动一个新的gedit实例并返回到再次提示。当我在命令行上输入gedit&时,这次显示1909,但没有新的gedit实例!而且我在系统监视器中找不到PID 1909的任何进程。这个新过程在哪里消失了?

具体发生在gedit吗?如果是这样,创建程序的多个实例时的一般行为是什么?

5 个答案:

答案 0 :(得分:4)

它特定于gedit。您可能正在寻找gedit --new-window &

来自man gedit

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

答案 1 :(得分:3)

这似乎特定于gedit,也许有一些选项可以关闭正在运行的实例的检查。

答案 2 :(得分:1)

看起来gedit首先在寻找正在运行的实例,而忽略了进一步的启动请求(只是一个疯狂的猜测)。但是手册页说,你可以打开另一个窗口:

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

这并不能完全解决你的问题,但也许这就是你首先想要的。

祝你好运, 亚历克斯。

答案 3 :(得分: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:

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

答案 4 :(得分:1)

在脚本中使用它。我发现它能满足我的需求:

#!/bin/bash
xterm -e "gedit; bash" &disown