Linux信号

信号的处理:

  1. 信号的处理有三种方法:忽略,捕捉,和默认动作。
  2. SIGKILL和SIGSTOP两种信号不能被忽略和捕捉。 

捕捉信号:执行自定义动作

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

                                  信号              函数

忽略信号: 

SIG_IGN

signal(SIGINT,SIG_IGN);   //此信号被忽略

有关函数: 

atoi函数:将字符串转换成整型数

sprintf函数:char cmd[128] = {0};

                     sprintf(cmd,"kill -%d %d",signum,pid);  //将 kill -%d %d 写入到cmd中

system函数:system(cmd);  //执行cmd中内容:"kill -%d %d"

 信号捕捉:

void handler(int signum//信号作为参数传递过来
{
        printf("get num=%d\n",signum);
        switch(signum){
                case 2:
                        printf("SIGINT\n");
                case 9:
                        printf("SIGKILL\n");
                case 10:
                        printf("SIGUSR1\n");
        }
}

int main()
{
        signal(SIGINT,handler);
        signal(SIGKILL,handler);
        signal(SIGUSR1,handler);

        while(1);
      return 0;
}

运行程序杀死进程: 

int main(int argc,char **argv)
{
        int signum;
        int pid;
        char cmd[128] = {0};

        signum = atoi(argv[1]);
        pid = atoi(argv[2]);

        printf("num = %d, pid = %d",signum,pid);

//      kill(pid,signum);

        sprintf(cmd,"kill -%d %d",signum,pid);
        system(cmd);

        printf("send signal ok\n");

        return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值