WebRTC服务器理论铺垫(一):几个重要的信号,信号的发送方式

  • SIGPIPE : 管道终止信号,当写入无人读取的管道时产生该信号,默认终止进程。比如当客户端关闭时,服务端仍然往socket写入信息,系统会自动杀死进程造成崩溃,因此网络程序必须要接管该信号。
  • SIGCHILD : 子进程结束或者结束的时候发送该信号。用于避免产生僵尸进程。

注 : 僵尸进程是一个早已经死亡的进程,但在进程表中仍然占有位置。
为什么会出现僵尸进程?
linux当子进程的结束的时候,他不会完全被销毁,因为父进程还要使用它的信息。因此父进程没有处理sigchild信号或者调用wait / waitpid()等待子进程结束,就会出现僵尸进程。

  • SIGALRM : 定时器信号,以秒为单位,默认终止进程。
  • SIGUSR1 / SIGUSR2 : 自定义,默认终止进程。
  • SIGINT : 键盘输入的退出信号 (Ctrl + \ ) 。
  • SIGQUIT :键盘输入的退出信号(Ctrl + C)。
  • SIGHUP : 控制终端的挂起信号。

那么信号的发送方式有哪些呢?

  • 键盘输入: ctrl + c , ctrl + \
  • 简单方式 : signal(int sig, void (*func)(int));
#include<iostream>
#include<signal.h>
#include<unistd.h>
using namespace std;
void sighandle(int sig)
{
    cout<<"recieved signal:"
        <<sig 
        <<endl;
}
int main(int argc,char* argv[])
{
    signal(SIGINT, sighandle);
    signal(SIGQUIT, sighandle);
    signal(SIGHUP, sighandle);
    pause();
    return 0;
}
  • 高级方式: int sigaction(int sig, const struct sigaction* act, struct sigaction* oact);
#include<iostream>
#include<signal.h>
#include<unistd.h>
using namespace std;
void sighandler(int sig)
{
    cout<<"recieved signal :"
        <<sig
        <<endl;
}
int main(int argc, char* argv[])
{
    struct sigaction act, oact;
    act.sa_handler = sighandler; 
    //将所有位置为1 
    sigfillset(&act.sa_mask);
    act.sa_flags = 0
    sigaction(SIGINT,&act,&oact);
    pause();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值