嗨,我已经完成了这段代码,但有些东西需要添加之类的。
void sig_handler(int signo)
{
// body of signal handler
}
int main()
{
struct sigaction act;
act.sa_flags = 0;
act.sa_handler = sig_handler;
sigfillset( & (act.sa_mask) );
if (sigaction(sig, &act, NULL) != 0)
{
perror("sigaction"); exit(1);
}
}
答案 0 :(得分:0)
这样的事情会让你开始。
#include <stdio.h>
#include <signal.h>
void handle_signal(int signum)
{
printf("\nRecived signal: %d\n", signum);
switch(signum)
{
case SIGINT:
printf("I won't respond to ctrl-c!\n");
//restore to default
signal(SIGINT, SIG_DFL);
break;
case SIGWINCH:
//windows size change
break;
case SIGCONT:
//continue process 'fg' in terminal
break;
case SIGTSTP:
//ctrl-z
break;
default:
//others
break;
}
}
void listen_to_signals(void)
{
int i;
i = 0;
while (i < 32)
{
if (i != SIGKILL && i != SIGSTOP && i != SIGCHLD && i != SIGCONT &&
i != SIGURG && i != SIGIO)
signal(i, &handle_signal);
i++;
}
}
int main()
{
listen_to_signals();
while(1)
{}
}
请注意,我正在听取所有信号:有一些我无法听到的信号(比如杀人)。
注意:使用&#39; kill -9 pidof your_program
&#39;阻止它
注意:第一次SIGINT
将被忽略,但第二次,它会赢(因为我将其恢复为默认行为)