18

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

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

这里信号 9是什么意思,除此之外还有其他信号吗?任何可用的文档。

我收到这种错误,当一个 App. 从 Xcode 启动由 Xcode 工具栏中的“停止”按钮终止。

(获得此错误的另一种方法是,按主页按钮,然后双击主页按钮并关闭应用程序。)

当我启动应用程序时,情况会变得更糟。再次,通过点击应用程序。iPad 屏幕上的图标,应用程序崩溃并抛出“libMobileGestalt copySystemVersionDictionaryValue:无法从系统版本字典中查找 ReleaseType”

通过在 stack overflow 上查找,我发现在 iOS 6 设备中发现了此错误。

url 指出这是一个 SIGKILL 错误,它发生在“应用程序立即终止,没有任何机会清理或捕获和处理信号”时

所以,我认为释放对象-(void) didReceiveMemoryWarning无助于解决它,那么什么是明确的解决方案?

- (void)didReceiveMemoryWarning 
{
    [super didReceiveMemoryWarning];

    // Release objects.
    obj1 = nil;
    [view1 removeFromSuperView];
    view1 = nil;
    ...
}
4

4 回答 4

20

这意味着应用程序收到了一个信号。一些信号可以由应用程序处理,而另一些则不能。信号 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
于 2015-01-16T17:52:41.520 回答
3

On UNIX systems the normal way to force terminate an app process is with

kill -9 PROCESS_ID

This sends the app the signal number nine which means: "you quit, NOW"

Generally unhandled exceptions will also cause the OS to terminate apps with this signal. Also killing an app via the "task switcher" does the same thing.

于 2013-08-21T06:07:55.990 回答
1

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

对我来说,这是由发送本地通知而不是实施引起的

application:didReceiveLocalNotification

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

于 2015-02-24T21:25:53.390 回答
0

在 linux 中,大约有 64 个信号(在某些系统中超过 64 个)..如果您想查看所有信号编号,只需在终端上键入不带引号的“kill -l”,您将看到这些信号的所有列表。信号由内核或用户在特定应用程序上的 kill 系统调用生成(例如 kill -n app_name )。信号 9 是 SIGKILL,用于终止应用程序。虽然我们也可以屏蔽一些信号,但并非所有信号都可以在应用程序中屏蔽。供将来参考。你可以去这里

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

并查看信号手册页,您将了解更多信息

于 2013-12-23T12:29:24.597 回答