2014-09-05 84 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(极端力又名杀),那么它不应用报告为已终止,因为这些是被认为是“故意杀死它'信号 - 即你有意试图杀死进程,因此在这种情况下不应该收到消息。