确定终止子进程未捕获的信号

时间:2011-06-01 05:52:43

标签: cocoa macos ipc signals nstask

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

如果帮助应用程序死亡,GUI将获得NSTaskDidTerminateNotification,并可以调用terminationReason来确定帮助程序是否正常退出或被杀死(NSTaskTerminationReasonUncaughtSignal)。但是,有没有办法确切地确定哪些信号未被捕获?我想知道它是SIGBUS还是SIGABRT。

这可能吗? NSTask似乎没有这个功能,但也许有一些UNIX-y voodoo?

更新 Terminal.app肯定知道。例如:

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

1 个答案:

答案 0 :(得分:1)

只需输入退出代码

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

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