Pav*_*ath 6 linux bash shell command-line
例如,要打开多个gedit
编辑器实例,我编写了这样的 shell 脚本-
gedit&
gedit&
gedit&
gedit&
Run Code Online (Sandbox Code Playgroud)
但是在我运行 shell script 后./example.sh
,我只能找到一个 gedit 实例!我什至使用了&
运算符,因此外壳不会等待一个实例完成。我仍然看不到gedit
.
我也直接从命令提示符尝试。如果我只是gedit&
在命令行上输入,它会显示1906
(这是新创建gedit
进程的 PID ),启动一个新gedit
实例并再次返回提示。当我gedit&
在命令行上输入时,它显示了1909
这次,但没有新的 gedit 实例!而且我PID 1909
在系统监视器中也找不到任何进程。这个新流程去哪儿了?
发生的特定于gedit
? 如果是这样,创建程序的多个实例时的通用行为是什么?
我来到这里,试图启动多个大胆的实例。
只允许一个实例实际上更难实现,因为程序需要找到已经运行的实例并与之通信。这是通过 D-Bus 完成的。为了防止与已启动的实例通信,您可以在另一个 D-Bus 会话中运行该程序:
nohup dbus-run-session 大胆 & nohup dbus-run-session 大胆 &
注意:即使要关闭终端,nohup 也会使程序保持运行。
此方法也适用于不允许用户在多个实例与一个实例之间进行选择的其他程序。
请注意,如果多个实例访问相同的配置文件,这可能会引入错误。
使用 xfce 4.14.1 和 dbus 1.12.20 进行测试
对于站点:
scite -check.if.already.open=false &
Run Code Online (Sandbox Code Playgroud)
温馨提示:
如果您像我一样,让系统运行了几个月,并且编辑了一些快捷方式或别名以使用此 hack 打开,那么一段时间后,某些程序将不再启动,因为已经有太多打开的 D-Bus 会话。在这种情况下,您必须终止已启动的 D-Bus 会话,这些会话在已启动的程序关闭时不会关闭。相反,杀死 D-Bus 会话也会杀死打开的程序,所以请小心使用!就我个人而言,我有一些长时间运行的自动启动程序,我想保持打开状态(firefox),所以我用以下命令杀死除前 10 个 D-Bus 会话之外的所有会话:
nohup dbus-run-session audacious & nohup dbus-run-session audacious &
最干净的解决方案是编写一个启动器脚本,等待程序完成,然后关闭打开的 D-Bus 会话。但这比看起来要困难一些,因为很难找到相应 D-Bus 会话的 PID。
PS:我也使用了这个技巧,因为我的系统上似乎有一些程序,一段时间后,会减慢系统默认文件打开对话框的速度,甚至需要几分钟才能打开!当尝试保存或打开文件时,程序似乎挂起。由于某种原因,新的 D-Bus 会话似乎解决了这个问题。在写这篇文章时,我发现这pkill gvfsd-trash
也是可行的,而且可能就是这个错误。所以在这个发布之前,我想我会添加pkill gvfsd-trash
到我的 crontab 中。
它特定于 gedit。您可能正在寻找gedit --new-window &
.
从man gedit
:
Run Code Online (Sandbox Code Playgroud)--new-window Create a new toplevel window in an existing instance of gedit.
归档时间: |
|
查看次数: |
14563 次 |
最近记录: |