GTK 单实例模式

GTK 单实例模式可确保同一时间只有一个应用实例在运行。

Ghostty 在检测到它不是从 CLI 环境启动时, 默认会使用 GTK 单实例模式。

GTK 项目推荐使用 GTK 单实例模式,这也是官方 Gnome 应用 被期待的惯常行为。当启动第二个 Ghostty 实例时, 原实例会创建新窗口、获得焦点, 并终止第二个实例。

Tip

如果你在 Linux 上使用 Ghostty 时遇到启动缓慢或内存占用高的问题, 可能是 GTK 单实例检测在你的环境中没有生效,你可能需要强制启用它。 继续阅读本页以了解更多。

CLI 环境检测

Ghostty 的默认行为是在_不_是从 CLI 环境启动时 使用 GTK 单实例模式。

Ghostty 有这个行为,是因为 CLI 终端用法很常见 (即 ghostty -e "some command"),在这些情况下, 预期的行为是启动一个新进程并阻塞直到它退出。 单实例模式让我们很难做到这一点,所以只有在从非 CLI 环境启动时,我们才想启用单实例模式。

并没有一个标准 API 可以检测应用是否从 非 CLI 环境启动,因此 Ghostty 使用以下启发式规则:

  1. 如果 TERM_PROGRAM 环境变量被设为任意非空 值,我们假定自己处于图形终端模拟器中,从而禁用 GTK 单实例模式。

  2. 如果有任何命令行参数被传给 Ghostty,我们假定需要 实例专属配置,禁用 GTK 单实例模式。

强制开启或关闭 GTK 单实例模式

你可以通过设置 gtk-single-instance 选项来 强制开启或关闭 GTK 单实例模式:

gtk-single-instance = true

值为 true 时会强制 Ghostty 以单实例模式运行。 在此模式下,如果已有 Ghostty 实例正在运行, 那么每个新的 ghostty 进程都会在现有 实例中创建一个新窗口。

与启动性能和内存使用的关系

Ghostty 是一个 GTK 应用。GTK 框架在 启动时有不可避免的开销,既体现在所花费的时间, 也体现在占用的内存上。Ghostty 对此无能为力。

GTK 单实例模式为后续的 Ghostty 实例避免了这些开销。 启动第二个 Ghostty 实例将非常快、占用极少 内存,因为它只是在现有实例 中创建一个新窗口。