2014-09-05 105 views
-1

我正在開發一個應用程序,有一種情況下,我試圖通過使用以下代碼通過終端殺死進程ID(運行應用程序的PID)來阻止正在運行的應用程序。對於以下方法,我傳遞了正在運行的應用程序的名稱。如何在進程死亡時隱藏警報消息?

代碼段:

-(void)lock:(NSString *)name 
{ 
    NSString *kil = [NSString stringWithFormat:@"killall -6 %@",name]; 
    system([kil UTF8String]); 
} 

那個時候我得到以下

給出一個警告信息「點擊重新打開再次打開該應用點擊報告查看更多詳細信息和。發送報告給Apple「

我想隱藏該警報消息給用戶。所以如果有任何出路,請給我建議。

+0

請隨反對票發表評論。 – 2014-09-05 10:28:55

+0

如果你想殺死它而沒有得到消息,你應該使用信號'9',而不是信號'6' – Petesh 2014-09-05 11:29:57

+0

這有效。你可以寫這個答案,以便我可以接受它,或者我應該刪除這個問題? – 2014-09-05 12:06:08

回答

3

「意外退出」消息有幾個原因。由於某些信號(SIGABRT,SIGSEGV,SIGBUS)而終止該過程是最常見的原因。信號的完整列表,默認情況下:

3  SIGQUIT  quit program 
4  SIGILL  illegal instruction 
5  SIGTRAP  trace trap 
6  SIGABRT  abort program (formerly SIGIOT) 
7  SIGEMT  emulate instruction executed 
8  SIGFPE  floating-point exception 
10 SIGBUS  bus error 
11 SIGSEGV  segmentation violation 
12 SIGSYS  non-existent system call invoked 

作爲開發人員,您可以截獲這些信號,並導致不同的行爲,但如果信號處理都留給它們的默認值,那麼這些信號將觸發行爲。

當您發送-6信號時,您將發送一個觸發信息的SIGABORT信號。

如果您有任何TERM-15,對於殺默認),或KILL(極端力又名殺),那麼它不應用報告爲已終止,因爲這些是被認爲是「故意殺死它'信號 - 即你有意試圖殺死進程,因此在這種情況下不應該收到消息。