web-dev-qa-db-ja.com

「シグナル9で異常終了:強制終了:9」の意味

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

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

ここでsignal 9はどういう意味ですか、それ以外にシグナルはありますか?利用可能なドキュメントがあります。

アプリの場合、この種のエラーが発生します。 Xcodeから起動すると、Xcodeツールバーの[停止]ボタンで終了します。

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

アプリを起動すると、事態はさらに悪化します。 もう一度、アプリをタップします。 iPad画面のアイコン、アプリがクラッシュして「libMobileGestalt copySystemVersionDictionaryValue:システムバージョンディクショナリからReleaseTypeを検索できませんでした」をスローする

スタックオーバーフローでの発見から、このエラーはiOS 6デバイスで発見されたことがわかります。

これは rlの状態 これはSIGKILLエラーであり、「アプリケーションをすぐに終了し、信号をクリーンアップまたはキャッチして処理する機会がない」ときに発生します。

それで、私は-(void) didReceiveMemoryWarningでオブジェクトを解放することはそれを解決する助けにはならないと思います、そして明確な解決策は何でしょうか?

_- (void)didReceiveMemoryWarning 
{
    [super didReceiveMemoryWarning];

    // Release objects.
    obj1 = nil;
    [view1 removeFromSuperView];
    view1 = nil;
    ...
}
_
14
weber67

これは、アプリケーションがシグナルを受信したことを意味します。アプリケーションによって処理できる信号もあれば、そうでない信号もあります。シグナル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
8
Breno Leitão

UNIXシステムでは、アプリプロセスを強制終了する通常の方法は

kill -9 PROCESS_ID

これにより、アプリに信号番号9が送信されます。

通常、未処理の例外により、OSはこの信号でアプリを終了します。 「タスクスイッチャー」を介してアプリを終了することも同じことを行います。

2
Cocoanetics

元の質問がシグナル9の意味を尋ねていることは知っていましたが、それを防ぐ方法を探しているときにこれを見つけました。

私にとって、これはローカル通知を送信し、実装していないことが原因でした

application:didReceiveLocalNotification

私のAppDelegateで。一度これを行うと、メソッドが空の場合でも、クラッシュは再現しませんでした。コードによって処理されていないシステムによって呼び出されているものがある可能性があります。

1
Chris

linuxでは約64の信号があります(一部のシステムでは64を超える)。すべての信号番号を表示するには、端末で引用符を付けずに「kill -l」と入力すると、これらの信号のすべてのリストが表示されます。シグナルは、カーネルによって、または特定のアプリケーションでのユーザーによるkillシステムコールによって生成されます(例:kill -n app_name)。シグナル9はSIGKILLで、これはアプリケーションを強制終了するために使用されます。一部の信号をマスクすることもできますが、アプリケーションですべての信号をマスクできるわけではありません。将来の参考のために。ここに行けます

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

また、詳細を知るための信号のmanページも参照してください。

0
user2760375