C++ Socket(四)

来源:互联网 发布:男士洗面奶推荐知乎 编辑:程序博客网 时间:2024/05/02 00:01

信号

信号又称为软中断。在Linux系统中,信号是进程间通信的一种机制,也是系统向用户进程发出通知的重要方式!

系统中已经预定义了一些系统信号,这些信号只可以由系统内核或者具有足够权限的用户进程产生。

非系统信号可以由用户进程产生。

对于系统信号,系统会优先调用用户进程中注册(即截取信号)的处理函数,此时默认处理函数(每个进程在创建之初就已经预定义好了默认处理函数来处理系统信号)将不会生效。如果没有注册处理函数(即没有截取这个信号)系统会调用默认处理函数。

例如如果注册监听了SIGSTOP和SIGKILL,并且在处理函数里面没有定义进程的退出机制,这个进程将永远不会退出。

信号注册(截取)函数为

#include<signal.h>

typedef void (*__sighandler_t) (int);

__sighandler_t signal (int __sig, __sighandler_t __handler);

信号产生函数为

#include<signal.h>

#include<sys/type.h>

int kill (__pid_t __pid, int __sig);

int raise (int __sig) ;


kill函数名为杀死,但是实际上跟杀死没半毛钱关系。当pid不为0时,向pid进程发送信号sig;当pid为0时,向所有进程发送信号sig。

raise:向自己发送信号sig


Socket编程中两个重要的系统信号

SIGPIPE

#include<signum.h>

#define SIGPIPE13

写套接字时,对方已关闭连接,将会得到一个SIGPIPE

SIGINT

进程被杀死时(例如Ctrl+C或者kill命令)当前进程将会得到这个信号量。
在收到这个通知之后,一般地我们需要在这里释放全局指针。
原创粉丝点击