Симулятор iOS SigKill

Я экспериментировал со своим приложением в симуляторе 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.


person Jim    schedule 09.04.2011    source источник


Ответы (1)


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

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

person Anomie    schedule 09.04.2011