信号是一个通知机制,异步产生,因为低层的硬件异常是由内核异常处理程序处理的,用户进程不可见,信号机制向用户通知异常发生,并记录在pcb中用。可以用 kill -l 命令查看,每个信号都有编号和宏定义的名称;1-31 为普通信号,34-64为实时信号。
产生方式:
1、键盘组合键
2、由硬件异常产生信号
3、调用kill()函数,默认动作是终止进程
信号处理:
1、忽略
2、执行默认动作
3、自定义动作:捕捉信号
core dump当一个进程异常中止时,可以选择把进程的用户空间的数据全部保存到磁盘上,生成文件,文件名叫core。可以调试检查core文件查看错误原因。下面是linux命令查看core文件
ulimit -c 返回0表示core文件关闭
ulimit -c 1024 core文件最大为1024k
下面为我写的一个死循环所测试的core文件
信号发送
头文件:<sys/types.h>
<signal.h>
int kill (pid_t pid ,int sig)
当pid>0 发送给进程,pid<0发送给进程组的每个进程
头文件:<unistd.h>
unsignal int alarm (unsignal int secs)
alarm函数让内核在secs秒内发送一个SIGALARM信号给所调用的进程,返回值为前一次闹钟剩余的时间
上面的小程序是1秒钟之内不停地数数,1秒钟到了就被SIGALRM信号终⽌止
运行:
下面的小程序是父进程调用kill 函数给子进程发送一个9号信号,kill函数可以给一个指定的进程发送指定的信号。
目的让子进程运行5秒后父进程发送信号结束子进程的死循环