Симулятор IOS SigKill - PullRequest
       5

Симулятор IOS SigKill

3 голосов
/ 09 апреля 2011

Я экспериментировал с моим приложением в симуляторе ios, когда обнаружил, что оно генерирует сигнал SIGKILL, когда я удаляю его из панели многозадачности, а затем снова запускаю его.(Я делаю это, останавливая приложение, запуская другое приложение, затем удаляя первое приложение из панели многозадачности и перезапуская его.)

Я подумал, что это может быть связано с моим последним экспериментом, добавив Core Data,но после попытки упростить условия, похоже, что это происходит с каждым приложением, с которым я тестирую.

Код останавливается в отладчике в точке, указанной моим комментарием:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);    //<- STOPS with SIGKILL here
    [pool release];
    return retVal;
}

Я также обнаружил, что он останавливается, как будто это точка останова.Я нажимаю кнопку продолжения, и она возобновляется, как будто ничего не произошло.Я поставил реальную точку останова на отмеченной линии, и она остановилась там.Нажатие кнопки «Продолжить» позволяет программе возобновить работу без появления сигнала SIGKILL.

Я пробовал это с базовой программой-шаблоном для Core Data, без моих собственных модификаций, и сигнал появляется.Я пробовал это с другими программами, которые не используют Core Data, и сигнал появляется.Я попробовал это сделать, когда программа уже загружена, но не отлажена, и программа ведет себя правильно, даже если проблема возникает во время отладки.

Конечно, SIGKILL не выдает никаких сообщений об ошибках, которые могут помочь.

Кто-нибудь знает, что происходит?Это не похоже на реальную проблему, но я хочу убедиться, что понимаю ее.

Я использую XCODE4.

1 Ответ

4 голосов
/ 09 апреля 2011

Удаление программы из панели многозадачности останавливает ее запуск. Это эквивалент опции «Принудительное завершение», которую вы получаете в OS X, если щелкнуть правой кнопкой мыши значок приложения в доке.

На уровне iOS это, очевидно, делается путем отправки в приложение сигнала "kill", известного как SIGKILL.

...