2017-04-24 87 views
-1

我要处理来自C程序一个kill signal。 我开始通过创建一个无限循环和处理的信号处理一个kill信号

void signal_callback_handler(int signum) 
{ 
    printf("Caught signal %d\n",signum); 
    // Cleanup and close up stuff here 

    // Terminate program 
    exit(signum); 
} 
main() 
{ 
    signal(SIGINT, signal_callback_handler); 
    printf("pid: %d \n",getpid()); 
    while(1) 
    { 

    } 

} 

当我运行这个程序,并CTRL + C,杀的处理,和它的作品。信息Caught signal已打印。 然而,当我试图从另一个程序

int main(int argc, char **argv) 
{ 
    kill(atoi(argv[1]), SIGKILL); 

    return 0; 

} 

该计划采空杀,但信号不被处理。换句话说,信息Caught signal未被打印。无限循环刚刚停止。

+5

变化'SIGKILL'到'SIGINT',它应该工作。这是非常有意义的,不可能抓住'SIGKILL'。 – zwol

+0

SIGKILL也是不得已而为之 –

+1

这'杀(的atoi(argv的[1]),...'是危险求代码... *不寒而栗* – alk

回答

4

这是它:你不能赶上SIGKILL,它将肯定杀了你的程序,这就是它被用于创建。

+0

,你可以捕捉它,而不是“停止”,它会滑出你的手一次。 – alk

+0

即使你能抓住它,他的第一个程序只有一个处理程序对于 – Barmar

+6

'SIGINT',不'SIGKILL' @alk不,你甚至不能抓住它SIGKILL和SIGSTOP将总是立即杀死或停止一个进程,分别是信号处理程序不会被调用 – duskwuff