18

コンソールに表示されるエラー コードの読み方

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

ここで、信号 9は何を意味するのか、それ以外に信号はありますか。利用可能なドキュメント。

アプリの場合、この種のエラーが発生します。Xcode から起動したものは、Xcode ツールバーの「停止」ボタンで終了します。

(このエラーを取得する別の方法は、ホーム ボタンを押してから、ホーム ボタンをダブルタップしてアプリを閉じることです。)

アプリを起動すると、事態はさらに悪化します。もう一度、アプリをタップして。iPad 画面上のアイコン、アプリがクラッシュし、「libMobileGestalt copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionary」がスローされる

スタック オーバーフローでの発見から、このエラーは 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 に答える