1) SIGHUP
2) SIGINT
3) SIGQUIT
4) SIGILL
5) SIGTRAP
6) SIGABRT
7) SIGBUS
8) SIGFPE 发生致命的运算错误
9) SIGKILL
10) SIGUSR1
11) SIGSEGV 访问了无效的内存
12) SIGUSR2
13) SIGPIPE Broken pipe 向一个没有读端的管道写数据
14) SIGALRM
15) SIGTERM
16) SIGSTKFLT
17) SIGCHLD 子进程结束的时候 会向父进程发送这个信号,默认动作是忽略
18) SIGCONT
19) SIGSTOP
20) SIGTSTP
21) SIGTTIN
22) SIGTTOU
23) SIGURG
24) SIGXCPU
25) SIGXFSZ
26) SIGVTALRM
27) SIGPROF
28) SIGWINCH
29) SIGIO
30) SIGPWR
31) SIGSYS
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
//13 SIGPIPE 向一个没有读端的管道写数据
//17 SIGCHLD 子进程结束的时候 会向父进程发送这个信号,默认动作是忽略
void chldhandler(int sig)
{
printf("recv a sig = %d\n", sig);
}
int main(int argc, char const *argv[])
{
pid_t pid;
pid = fork();
if (pid > 0)
{
//SIGCHLD 默认动作是忽略
signal(SIGCHLD,chldhandler);
wait(NULL);
printf("父进程 id = %d\n",(int)getpid());
}else if (pid == 0)
{
printf("子进程id=%d\n",(int)getpid());
}else{
ERR_EXIT("fork");
}
return 0;
}
//访问了无效的内存 ,著名的段错误。
int main(int argc, char const *argv[])
{
/**
访问受保护的地址
*/
int * sp = (int *)0;
*sp = 100;
/**
访问不存在的地址
*/
int * ptr;
*ptr = 100;
/**
访问只读的内存
*/
char * username = "leesagacious";
*username = "gcc";
return 0;
}
8 : SIGFPE
void handler(int sig)
{
printf("recv a sig = %d\n",sig);
exit(0);
}
int main(int argc, char const *argv[])
{
signal(SIGFPE,handler); //发生致命运算错误。
int a = 100 / 0;
return 0;
}