我有一个Mac OS X应用程序(Cocoa),它产生了一个C ++控制台帮助程序应用程序来做一些工作。 GUI通过NSTask生成帮助程序,并且它们通过命名管道相互通信。一切都很好。

如果助手应用程序死了,则GUI会获取NSTaskDidTerminateNotification,并可以调用TerminationReason确定助手是否正常退出或被杀死(NSTaskTerminationReasonUncaughtSignal)。但是,是否有任何方法可以准确确定未捕获的信号?我想知道是SIGBUS还是SIGABRT。

这可能吗? NSTask似乎没有此功能,但是也许有一些UNIX-y伏都教?

更新:
Terminal.app当然知道。例如:

$ cat >crash.c
int main( void ) {
    int *crashy = 0;
    *crashy = 0xdeadbeef;
    return 0;
}
^C
$ clang crash.c
$ ./a.out
Segmentation fault

最佳答案

只需要退出代码

NSTask* task = ...
[task waitUntilExit];


task.terminationStatus是您所需要的,它是https://www.tutorialspoint.com/unix/unix-signals-traps.htm信号之一的代码

关于cocoa - 确定终止子进程未捕获的信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6196855/

10-15 10:11