Linux中信号的使用

1、信号的基本概念

信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。

2、修改信号的相应方式——signal()

利用signal()可以将指定的信号进行修改
忽略信号:SIG_IGN
默认处理:SIG_DFL
自定义的:自己写的信号处理函数

示例1:
例如下面这段程序表明将SIGINT(键盘按下ctrl+c时,产生该信号)信号修改为自定义的fun处理函数

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<assert.h>
void fun(int sign)
{
    printf("fun was called, sign = %d\n", sign);
}
int main()
{
    signal(SIGINT, fun);
    while(1)
    {
    sleep(1);
    printf("main running\n");
    }
    exit(0);
}

程序运行如下:
在这里插入图片描述

3、发送信号—— kill()

kill() 可以向指定的进程发送指定的信号‘
int kill(pid_t pid,int sig);

pid > 0 指定将信号发送个那个进程

pid == 0 信号被发送到和当前进程在同一个进程组的进程

pid == -1 将信号发送给系统上有权限发送的所有的进程

pid < -1 将信号发送给进程组 id 等于 pid 绝对值,并且有权限发送的所有的进程。

sig 指定发送信号的类型。

示例2:
下面的代码表示:运行此程序并输入一个进程的pid,将该进程使用sig信号进行处理

#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <signal.h>

int main(int argc, char* argv[])//pid, sig
{
    if ( argc != 3 )
    {
    printf("argc error\n");
    exit(0);
    }
    int pid = 0;
    int sig = 0;
    sscanf(argv[1],"%d",&pid); 
    sscanf(argv[2],"%d",&sig);
   if ( kill(pid,sig) == -1 )
    {
     perror("kill error");
     }
      exit(0);
}

程序运行如下:
查询示例1的进程id,然后运行实例2,使用SIGKILL(#define SIGKILL 9)信号杀死进程14851(示例1)
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仟各

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值