比如说,打开gedit
编辑器的多个实例我写了一个这样的shell脚本 -
gedit&
gedit&
gedit&
gedit&
但是在运行我的shell脚本./example.sh
后,我只能找到一个gedit实例!我甚至使用了&
运算符,因此shell不会等待一个实例完成。我仍然看不到gedit
的四个实例。
我也直接从命令提示符处尝试。如果我只是在命令行中输入gedit&
,它会显示1906
(这是新创建的gedit
进程的PID),启动一个新的gedit
实例并返回到再次提示。当我在命令行上输入gedit&
时,这次显示1909
,但没有新的gedit实例!而且我在系统监视器中找不到PID 1909
的任何进程。这个新过程在哪里消失了?
具体发生在gedit
吗?如果是这样,创建程序的多个实例时的一般行为是什么?
答案 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