我来到这里,试图启动多个大胆的实例。
只允许一个实例实际上更难实现,因为程序需要找到已经运行的实例并与之通信。这是通过 D-Bus 完成的。为了防止与已启动的实例通信,您可以在另一个 D-Bus 会话中运行该程序:
nohup dbus-run-session audacious &
nohup dbus-run-session audacious &
注意:即使要关闭终端,nohup 也会使程序保持运行。
此方法也适用于不允许用户在多个实例与一个实例之间进行选择的其他程序。
请注意,如果多个实例访问相同的配置文件,这可能会引入错误。
使用 xfce 4.14.1 和 dbus 1.12.20 进行测试
对于站点:
scite -check.if.already.open=false &
温馨提示:
如果您像我一样,让系统运行了几个月,并且编辑了一些快捷方式或别名以使用此 hack 打开,那么一段时间后,某些程序将不再启动,因为已经有太多打开的 D-Bus 会话。在这种情况下,您必须终止已启动的 D-Bus 会话,这些会话在已启动的程序关闭时不会关闭。相反,杀死 D-Bus 会话也会杀死打开的程序,所以请小心使用!就我个人而言,我有一些长时间运行的自动启动程序,我想将它们保持打开状态(firefox),所以我用以下命令杀死除前 10 个 D-Bus 会话之外的所有会话:
for pid in $( ps --sort start_time -aux | grep dbus-daemon | tail +10 | awk '{ print $2; }' ); do kill $pid; done
最干净的解决方案是编写一个启动器脚本,等待程序完成,然后关闭打开的 D-Bus 会话。但这比看起来要困难一些,因为很难找到相应 D-Bus 会话的 PID。
P.S.:我也使用了这个技巧,因为我的系统上似乎有一些程序,一段时间后,会减慢系统默认文件打开对话框的速度,甚至需要几分钟才能打开!当尝试保存或打开文件时,程序似乎挂起。由于某种原因,新的 D-Bus 会话似乎解决了这个问题。在写这篇文章的时候我发现pkill gvfsd-trash
也有效,并且可能是this https://gitlab.gnome.org/GNOME/gvfs/-/issues/485漏洞。所以在发货之前,我想我会添加pkill gvfsd-trash
到我的 crontab。