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