我有一个Cocoa基础工具,我作为LaunchDeamon运行。当应用程序被系统终止时,无论是重启还是关机(甚至是launchctl卸载),有没有办法可以捕获这个事件,以便我可以执行一些终结功能?
答案 0 :(得分:2)
您正在讨论的所有案例都会向此流程发送SIGTERM
。您想为此添加信号处理程序。请参阅signal和sigaction的手册页。仔细阅读警告。在信号处理程序中只有某些函数是合法的(原则上你永远不应该分配堆内存)。通常,最好只使用处理程序设置一个标志,告诉主线程终止。
如果您正在使用运行循环,您可能还需要查看PreLoginAgents有关如何使用运行循环处理SIGTERM
的示例。
请参阅“守护进程和服务编程指南”中的Terminating Processes,详细了解将向您的进程发送哪些信号。
答案 1 :(得分:0)
所有NSObject
子类在死亡前调用方法:- finalize
。处理崩溃还有NSSetUncaughtExceptionHandler
。