在 Mac 应用程序中处理 SIGABRT



我为Mac OS创建了一个非常简单的桌面应用程序。 由于限制,我无法使用xcode。 我正在手动构建.app目录,目前主要的可执行文件是一个 shell 脚本。

当我试用我的应用程序时,我注意到如果我打开和关闭它的速度太快,应用程序就会冻结。 在这一点上,我似乎甚至无法强行退出它,不得不 rm - 是.app本身。 一位朋友向我提到,mac应用程序必须处理SIGABRT,如果它们不处理,则有一个超时时间,应用程序可能会显示为冻结,这也许可以解释我观察到的情况。

我环顾四周,但不确定在哪里可以找到有关此的更多信息。 谁能进一步解释这种情况? 应用在什么情况下会收到 SIGABRT,应如何处理? 有关此主题的任何链接或文献,将不胜感激。

万一有人偶然发现这个:

所以我的朋友在这里指的是Unix信号。 https://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm

(要查看操作系统上可用的内容,请给出"kill -l")

在我的 MyApp.app/Contents/MacOS 中,我的主要可执行文件是一个 shell 脚本。 所以我发现我能做的,就是使用 trap 命令。 如果可执行文件收到其中一个信号,这将给出要执行的行为。 示例 - 我现在在 shell 脚本顶部附近添加此行:

陷阱"出口" 5 6

这意味着,如果可执行文件收到SIGABRT (6)或SIGTRAP(5)信号,它将执行命令"exit"并将退出。 (我不确定应该处理哪些所有信号以及最好的课程是什么,我想这可能取决于您自己的应用程序,但这只是要做的事情的一个例子)

以下是有关陷阱命令和 unix 信号的资源:https://www.tutorialspoint.com/unix/unix-signals-traps.htm

为什么这会有所不同 - 我相信以前,在某些情况下,例如,如果我在应用程序已经打开时打开它,它会像 SIGABRT 一样接收 Unix 信号。 此信号未被处理,应用程序不知道在这种情况下该怎么做,并且正在冻结。 虽然我还没有证实这是正在发生的事情。

最新更新