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

问题描述 投票:1回答:1

我有一个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
cocoa macos ipc signals nstask
1个回答
1
投票

只需要退出代码

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

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

© www.soinside.com 2019 - 2024. All rights reserved.