Что "вышло аномально с сигналом 9: убито: 9" означает

Как читать коды ошибок, которые появляются в консоли?

<Warning>:  ....... -exited abnormally with signal 9: Killed: 9
<Warning>:  ....... -1 err = Bad file descriptor (0x00000009)

Здесь то, что означает сигнал 9, есть ли больше никаких сигналов. Доступна любая документация.

Я получаю такую ​​ошибку, когда приложение. запущенный из Xcode, завершается кнопкой "Стоп" в панели инструментов Xcode.

{Еще один способ получить эту ошибку: нажать кнопку "домой", затем дважды нажать кнопку "домой" и закрыть приложение. }

Вещи еще хуже, когда я запускаю приложение. снова, нажав на App. значок на экране iPad, приложение вылетает и бросает "libMobileGestalt copySystemVersionDictionaryValue: не удалось найти ReleaseType из словаря версии системы"

От поиска при переполнении стека я вижу, что эта ошибка обнаружена в устройствах iOS 6.

Этот url утверждает, что это ошибка SIGKILL, и это происходит, когда "приложение завершается немедленно, без каких-либо шансов очистить или поймать и обработать сигнал"

Итак, я думаю, что освобождение объектов в "- (void) didReceiveMemoryWarning" не помогло бы его решить, тогда какое может быть определенное решение?

-(void) didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
    //release objects
    obj1=nil;
    [view1 removeFromSuperView];
    view1=nil;
    ........
}

Ответ 1

Это означает, что приложение получило сигнал. Некоторые сигналы могут обрабатываться приложениями, другие - нет. Сигнал 9 означает, что приложение нужно убить, оно не обрабатывается процессом, а планировщиком Linux. Сигналом для завершения процесса, который обрабатывается процессом, является SIGTERM (15), но если процесс не обрабатывает его свойство, то процесс продолжает жить.

вот основные сигналы:

   Signal     Value     Action   Comment
   ──────────────────────────────────────────────────────────────────────
   SIGHUP        1       Term    Hangup detected on controlling terminal
                                 or death of controlling process
   SIGINT        2       Term    Interrupt from keyboard
   SIGQUIT       3       Core    Quit from keyboard
   SIGILL        4       Core    Illegal Instruction
   SIGABRT       6       Core    Abort signal from abort(3)
   SIGFPE        8       Core    Floating point exception
   SIGKILL       9       Term    Kill signal
   SIGSEGV      11       Core    Invalid memory reference
   SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                 readers
   SIGALRM      14       Term    Timer signal from alarm(2)
   SIGTERM      15       Term    Termination signal
   SIGUSR1   30,10,16    Term    User-defined signal 1
   SIGUSR2   31,12,17    Term    User-defined signal 2
   SIGCHLD   20,17,18    Ign     Child stopped or terminated
   SIGCONT   19,18,25    Cont    Continue if stopped
   SIGSTOP   17,19,23    Stop    Stop process
   SIGTSTP   18,20,24    Stop    Stop typed at terminal
   SIGTTIN   21,21,26    Stop    Terminal input for background process
   SIGTTOU   22,22,27    Stop    Terminal output for background process

Ответ 2

Я знаю, что исходный вопрос задавал вопрос, что означает сигнал 9, но я нашел это, ища, как его предотвратить.

Для меня это было вызвано отправкой локального уведомления и не реализованием

application:didReceiveLocalNotification

в моем AppDelegate. Как только я это сделал, даже при пустом методе крах не появился снова. Скорее всего, есть что-то, вызываемое системой, которая не обрабатывается вашим кодом.

Ответ 3

В системах UNIX обычным способом принудительного завершения процесса приложения является

kill -9 PROCESS_ID

Это отправляет приложению номер сигнала девять, что означает: "вы уходите, СЕЙЧАС"

Вообще необработанные исключения также заставят ОС прекратить приложения с этим сигналом. Также убийство приложения через "переключатель задач" делает то же самое.

Ответ 4

в linux имеется около 64 сигналов (более 64 в некоторой системе). Если вы хотите увидеть все нумерации сигналов, просто введите "kill -l" без цитаты на терминале, вы увидите весь список сигналов. сигналы генерируются ядром или путем вызова системы kill пользователем в конкретном приложении (например, kill -n app_name). сигнал 9 является SIGKILL, это используется для уничтожения приложения. хотя мы также можем маскировать некоторые из сигналов, но не все сигналы могут быть замаскированы в приложении. для будущего ref. вы можете пойти здесь

http://en.wikipedia.org/wiki/Unix_signal

а также увидеть страницу руководства для сигнала, которую вы узнаете больше