我有一个 Mac OS X 应用程序 (Cocoa),它生成了一个 C++ 控制台助手应用程序来完成一些工作。GUI 通过 NSTask 生成助手,它们通过命名管道相互通信。这一切都很好。
如果助手应用程序死亡,GUI 会收到一个 NSTaskDidTerminateNotification,并可以调用终止原因来确定助手是正常退出还是被杀死(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