typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
功能:捕捉一個指定的信號,并作相應的處理
參數:signum :要捕捉的信號
handler:SIG_IGN //忽略
SIG_DFL //執行默認操作
fun //執行相應的函數代碼
返回:失敗返回SIG_ERR
注意:1、SIGKILL和SIGSTOP不能被捕捉
2、signal是非阻塞函數,不會一直等待指定信號的產生
3、信號的查看使用命令 kill -1
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void fun(int sig)
{
if(sig == SIGINT)
{
puts("catch SIGINT");
}
}
int main(int argc, const char *argv[])
{
if(signal(SIGINT, fun) == SIG_ERR) //SIGINT信號的物理按鍵為ctrl+c
{ //當捕捉到ctrl+c后執行fun函數
perror("signal error");
exit(1);
}
if(signal(SIGTSTP, SIG_IGN) == SIG_ERR)
{ //SIGTSTP信號的物理按鍵為ctrl+z
perror("signal error"); //當捕捉到ctrl+z后會忽略此信號
exit(1);
}
if(signal(SIGQUIT, SIG_DFL) == SIG_ERR)
{ //當捕捉到ctrl+\后會執行默認操作結束程序
perror("signal error"); //SIGQUIT信號的物理按鍵為ctrl+\
exit(1);
}
puts("signal"); //signal是非阻塞函數,所以puts會立即打印輸出
while(1);
return 0;
}