2011-05-05 122 views

回答

3

注册搭上信号:

void termination_handler(int sig) 
{ 
    /* do something */ 
} 

struct sigaction handler; 

handler.sa_handler = termination_handler; 
sigemptyset (&handler.sa_mask); 
handler.sa_flags = SA_RESTART; 

sigaction(SIGTERM, &handler, NULL); 

这里是一个很好example page

你可以使用旧的风格,但不建议:

void termination_handler() 
{ 
    /* do something */ 
} 

signal(SIGTERM, termination_handler); 
+0

权。这工作正常,我使用“信号”。在事件中,我向特定的PID发送kill命令,因为该过程如何确定信号是按照我的方式发送的? – JAM 2011-05-05 03:46:30

+1

你几乎肯定希望'handler.sa_flags = SA_RESTART;'。非重新启动信号会严重破坏不期望得到'EINTR'且不处理它的代码。 – 2011-05-05 04:04:57

+0

@R ..好点。修改为反映 – pickypg 2011-05-05 04:20:02