コンソールに表示されるエラーコードの読み方
_<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;
...
}
_
これは、アプリケーションがシグナルを受信したことを意味します。アプリケーションによって処理できる信号もあれば、そうでない信号もあります。シグナル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
UNIXシステムでは、アプリプロセスを強制終了する通常の方法は
kill -9 PROCESS_ID
これにより、アプリに信号番号9が送信されます。
通常、未処理の例外により、OSはこの信号でアプリを終了します。 「タスクスイッチャー」を介してアプリを終了することも同じことを行います。
元の質問がシグナル9の意味を尋ねていることは知っていましたが、それを防ぐ方法を探しているときにこれを見つけました。
私にとって、これはローカル通知を送信し、実装していないことが原因でした
application:didReceiveLocalNotification
私のAppDelegateで。一度これを行うと、メソッドが空の場合でも、クラッシュは再現しませんでした。コードによって処理されていないシステムによって呼び出されているものがある可能性があります。
linuxでは約64の信号があります(一部のシステムでは64を超える)。すべての信号番号を表示するには、端末で引用符を付けずに「kill -l」と入力すると、これらの信号のすべてのリストが表示されます。シグナルは、カーネルによって、または特定のアプリケーションでのユーザーによるkillシステムコールによって生成されます(例:kill -n app_name)。シグナル9はSIGKILLで、これはアプリケーションを強制終了するために使用されます。一部の信号をマスクすることもできますが、アプリケーションですべての信号をマスクできるわけではありません。将来の参考のために。ここに行けます
http://en.wikipedia.org/wiki/Unix_signal
また、詳細を知るための信号のmanページも参照してください。