Dock Icon 两次相同的实例和非 GUI 进程错误地标记为“无响应”

Posted

技术标签:

【中文标题】Dock Icon 两次相同的实例和非 GUI 进程错误地标记为“无响应”【英文标题】:Dock Icon twice of same instance and Non-Gui process wrongly tagged "not responding" 【发布时间】:2014-06-12 10:50:37 【问题描述】:

我用 C++ 编写的应用程序有问题。

在我启动我的应用程序后,它运行了 3 个子进程。在活动监视器中,它看起来是这样的: 我的应用 - 进程1 - 进程2 - 进程3

process1 是一个 vncserver。如果客户端连接,“process1”现在称为“MyApp”,并且 Dock 中会出现第二个图标。 我发现图标出现在函数“select(..)”被调用之后。 为什么会这样?

如果我在 process1 启动时调用它(在外部 .mm 文件中)

[NSApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyProhibited];

第二个图标出现的时间很短,但立即消失。这解决了我的问题。但现在我的“process1”(现在称为“MyApp”)在活动监视器中被标记为“无响应”。该进程运行并响应客户端。 OSX 现在认为我的子进程是一个 GUI 进程并将其标记为“无响应”。 我怎样才能防止这种情况发生?

编辑:

进程“MyApp”启动3个进程,一个vncserver,一个ftp客户端和一个ssh客户端。 ftp 和 ssh 客户端工作正常。但是 vncserver 更改了他的进程名称并显示了第二个 Dock 图标。如果我禁用该图标,该进程将被标记为“无响应”,但仍会响应连接的客户端。

用户可能对第二个停靠图标或无响应进程感到困惑,并认为出现问题。

【问题讨论】:

【参考方案1】:

如果在Info.plist中为相关进程设置了LSUIElement标志,它将停止图标出现在文档中。

所以将这个添加到 info.plist 文件中:-

<key>LSUIElement</key>
<true/>

这记录在Launch Services 下。

【讨论】:

问题是我的应用应该留在 Dock 中,但只能停留一次。 抱歉,我不确定我是否理解您的问题。 3个子流程是什么意思?我假设是 3 个应用程序,其中一个启动另外两个,而您希望另外两个停止显示在 Dock 中。 进程“MyApp”启动3个进程,一个vncserver,一个ftp客户端和一个ssh客户端。 ftp 和 ssh 客户端工作正常。但是 vncserver 更改了他的进程名称并显示了第二个 Dock 图标。如果我禁用该图标,该进程会被标记为“无响应”,但仍会响应连接的客户端。用户可能会对第二个停靠图标或无响应进程感到困惑,并认为出现问题。 这样就清楚多了。我建议您更改您的问题以包含您在此处所做的评论。 完成。我希望现在能更好地理解【参考方案2】:

我找到了解决方案。 vncserver 位于 Contents/MacOS 目录中,但它必须在 Contents/Resources

就是这样:)

【讨论】:

以上是关于Dock Icon 两次相同的实例和非 GUI 进程错误地标记为“无响应”的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 下关于 IDEA 或应用程序图标在 Dock 栏下显示异常的问题

在非 gui 线程中获取文件图标 (QFileIconProvider::icon)

jmeter-----GUI运行和非GUI运行的区别

使用非弃用时,应为弃用和非弃用变体调用两次 shouldInterceptRequest

C++ GUI Windows 默认浏览器

002_GUI程序实例分析