【问题标题】:Xcode signal to end appXcode 发出结束应用程序的信号
【发布时间】:2011-09-15 22:00:51
【问题描述】:

有谁知道 Xcode 发送什么信号来杀死正在运行的程序?我需要一个处理程序在程序被杀死之前进行一些清理。我已经尝试过 SIGINT 和 SIGTERM 但它似乎不起作用。

【问题讨论】:

    标签: c xcode macos handler signals


    【解决方案1】:

    它发送信号 SIGKILL。要验证您可以在调试模式下打开任何应用程序并在停止任务时检查控制台。

    但是,如果是 kill -9,则无法捕获信号。

    您想做什么样的清理工作?我认为没有必要处理该事件,因为您是从 XCode 故意这样做的。如果您尝试将此信号从 Xcode 外部(如 Terminal)发送到进程,那么这是有道理的。

    【讨论】:

    • 我使用sem_open 来初始化一个posix 信号量。我需要调用sem_unlink 来释放信号量的字符串标识符(应用程序在无限循环中运行,它不应该停止,所以我不能从主程序执行)。我也尝试了 SIGKILL,但它似乎不起作用。
    • @Saphrosit:我认为您无法通过捕获信号并为其编写处理程序来处理这种情况。你可以在你的代码中使用 boost 库吗?我相信你可以使用勺子指针或类似的东西? (我不确定是否有像舀信号量这样的东西,但你肯定可以朝那个方向走)
    • 由于信号量标识符保存在内核中,我解决了调用另一个程序简单地调用sem_unlink。只是一种解决方法,但它有效。还是谢谢!
    • 该程序是持续运行还是您调用它?如果它运行,请确保没有人杀死它。或者如果被杀死,它会重新启动。
    【解决方案2】:

    你不应该那样做。

    使用您的AppDelegate 的适当委托方法。

    【讨论】:

    • 当调试器终止您的进程时,不会调用应用程序委托方法。
    • @Mike Weller 没错,但无论如何你都不应该依赖它——因为如果没有这些触发器,你的应用程序也可能在真实设备上被杀死。 IMO,将处理这种情况的代码构建到应用程序中是错误的(更多的是设计错误)。
    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多