我为Mac OS创建了一个非常简单的桌面应用程序。由于限制,我无法使用xcode。我正在手工构建.app目录,目前主要的可执行文件是shell脚本。
当我尝试使用我的应用程序时,我注意到如果我打开并关闭它太快,应用程序就会冻结。在这一点上,我似乎甚至无法强制退出它,并且不得不使用.app本身。一位朋友向我提到,mac应用程序必须处理SIGABRT,如果他们不这样做,会有一个超时期限,应用程序可能会显示为冻结,这可能解释了我观察到的内容。
我环顾四周但不确定在哪里可以找到更多相关信息。谁能进一步解释这种情况?应用程序在什么情况下会收到SIGABRT,应该如何处理?关于这个主题的任何链接或文献将非常感激。
答案 0 :(得分:0)
万一有人偶然发现:
所以我的朋友在这里指的是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信号。此信号未被处理,应用程序不知道在该场景中该做什么,并且冻结了。虽然我没有证实这是发生了什么。