Определите, какой сигнал не обработан завершенным дочерним процессом - PullRequest
1 голос
/ 01 июня 2011

У меня есть приложение Mac OS X (Какао), которое порождает вспомогательное приложение консоли C ++ для выполнения некоторой работы.GUI порождает помощника через NSTask, и они общаются друг с другом через именованные каналы.Это все хорошо.

Если вспомогательное приложение умирает, графический интерфейс пользователя получает NSTaskDidTerminateNotification и может вызвать terminationReason, чтобы определить, нормально ли завершился помощник или он был убит (NSTaskTerminationReasonUncaughtSignal).Но есть ли способ точно определить, какой сигнал был необученным?Я хотел бы знать, был ли это SIGBUS или SIGABRT, например.

Возможно ли это?NSTask, похоже, не обладает такой функциональностью, но, возможно, есть какой-то UNIX-й 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 Ответ

1 голос
/ 13 апреля 2019

Просто возьмите код выхода

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

task.terminationStatus - это то, что вам нужно, это код сигнала один из https://www.tutorialspoint.com/unix/unix-signals-traps.htm

...