常用信号
2)SIGINT:当用户按下ctrl+c 用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程
3)SIGQUIT:当用户按下ctrl+\ 用户终端向正在运行中的由该终端启动的进程发送该信号。默认动作终止进程
9)SIGKILL:无条件终止信号 不能捕捉、不能忽略、不能设置为阻塞
11)SIGPIPE:向一个没有读端的管道写数据。默认动作为终止进程
17)SIGCHLD:子进程结束时,父进程回收到这个信号。默认动作忽略这个信号,通过SIGCHLD可以实现对子进程的回收
18)SIGCONT:如果进程终止,则使其继续执行
19)SIGSTOP:终止进程 不能捕捉、不能忽略、不能设置为阻塞
信号产生函数
int kill(pid_t pid,int sig);//向指定进程pid发送信号sig -pid >0 将信号发送给指定的进程 -1 将信号发送给每一个有权限接受这个信号的进程 0 将信号发送给当前进程组 <-1 |pid|发送给指定的进程组 -sig 发送的信号 int raise(int sig); //给当前进程发送信号int abort(void); //给当前进程发送 SIGABRT 杀死当前进程,并产生core文件
设置定时器
信号集操作函数
信号捕捉
信号的产生和捕捉都是内核完成的
内核实现信号捕捉过程:
内存共享
共享内存允许两个或多个进程共享物理内存同一块区域(通常被称为段)。由于共享内存段会成为一个进程用户空间的一部分,因此这种PIC机制无需内核介入。所需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其它所有共享同一个段的进程可用。
对比:
管道对比-->管道是在内核区建立一个缓冲区,发送方需要将待发送的数据先拷贝到内核缓冲区;接受进程,需 要从内核缓冲区将数据拷到用户区。
内存映射-->内存映射是建立一个内存映射区与文件相关联,通过这个共享这个文件为媒介实现进程间通信。文 件是保存在磁盘上的,速度相对较慢。
内存共享-->直接共享一个物理内存段,不需要内核介入,只需要将数据拷贝到内存共享段中,就可以被其他共 享这段物理内存段的进程共享,实现进程间通信。在内存上时间读取,速度相对较快。
共享内存操作API
共享内存操作命令