1

我有一个 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
4

1 回答 1

2

只需获取退出代码

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

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

于 2019-04-13T09:07:11.843 回答