什么“与信号9异常退出:被杀:9”的意思

时间:2013-05-02 13:10:12

标签: memory ios6 xcode4.5 crash-reports

如何读取控制台中出现的错误代码?

<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 states表示这是一个SIGKILL错误,当“应用程序立即终止,没有任何机会清理或捕获并处理信号”时会发生错误“

所以,我认为在“ - (void)didReceiveMemoryWarning”中释放objets无助于解决它,那么什么可以是一个明确的解决方案?

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

4 个答案:

答案 0 :(得分:5)

这意味着应用程序收到了一个信号。有些信号可以由应用程序处理,有些则不是。信号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

答案 1 :(得分:1)

在UNIX系统上,强制终止应用程序进程的正常方法是使用

kill -9 PROCESS_ID

这会向应用程序发送信号编号9,这意味着:“你现在就退出”

通常未处理的异常也会导致操作系统使用此信号终止应用程序。通过“任务切换器”杀死应用程序也可以做同样的事情。

答案 2 :(得分:1)

我知道最初的问题是询问信号9是什么意思,但我在寻找如何预防时发现了这一点。

对我而言,这是由发送本地通知而未实施

引起的
application:didReceiveLocalNotification

在我的AppDelegate中。一旦我这样做,即使方法为空,崩溃也不会重新出现。有可能系统调用的东西没有被你的代码处理。

答案 3 :(得分:0)

在linux中有大约64个信号(在某些系统中超过64个)..如果你想看到所有信号编号只是类型&#34; kill -l&#34;如果没有在终端上引用,您将看到所有信号列表。信号由内核或用户在特定应用程序上的kill系统调用生成(例如kill -n app_name)。信号9是SIGKILL,这是用来杀死应用程序。虽然我们也可以屏蔽一些信号,但并非所有信号都可以在应用程序中屏蔽。为了将来的参考。你可以去这里

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

并且还会看到信号的手册页,您将了解更多信息