Linux12 信号

目录

1、信号的基本概念

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

3、发送信号  kill()

4、kill()发送信号到进程响应有三种方式:默认、忽略、自定义(signal())

5、信号什么时候会产生

6、signal(信号名,新定义的函数名)

7、信号的实现


1、信号的基本概念

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

与信号有关的系统调用再signal.h头文件中有声明

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

在键盘上按ctrl+c,会给当前终端前台执行的进程发送SIGINT信号,用signal()修改SIGINT信号的相应方式的代码如下:

void fun(int sign)

{

printf(“fun was called,sign=%d\n”,sign);
}

int main()

{

signal(SIGNT,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 指定发送信号的类型

int main(int argc,char*argv[])

{

if(argc!=3)

{

printf(“argc error”);

exit(0);
}

int pid=0;

int sig=0;

sccanf(argv[1],”%d”,&pid);

sccanf(argv[2],”%d”,&sig);

if(kill(pid,sig)==-1)

{

perror(“kill error”);

}

exit(0);

}

4、kill()发送信号到进程响应有三种方式:默认、忽略、自定义(signal())

5、信号什么时候会产生

ctrul+c(命令)——>发送信号//用信号代表这件事情产生了

中断(软中断)//信号打断了进程

当某个进程正在执行时,用户在终端键盘上按下某些键时,此时会产生一个硬件中断。此时终端驱动程序会将其解释为某一种信号,操作系统得知后会将该信号发送个正在前台运行的进程。并在合适的时机去处理该信号

大部分信号的产生都是因为进程产生了异常

只有信号才能把进程终止

  1. 信号自定义signal(),将信号改变成自定义的信号,当调用signal时,内核收到信号,直接调用相应的方法

6、signal(信号名,新定义的函数名)

  1. 忽略SIG_IGN
  2. 默认SIG_DFL//收到以后当作没收到
  3. kill()//发送信号,pid 信号的代号,向指定的进程发送信号

九号信号永远不会被改变,是留给管理员的最后一个办法,这个信号不可以通过signal进行改变

argv[]//参数前三位分别是路径、pid(唯一标识进程的编码)、sig(信号的代号)

7、信号的实现

收到信号的实体是一个进程

  1. 信号是为了通知进程发生了某种事件,事件没有正常结束,一定是发出了某种信号,事件中发生了某种事件
  2. 段错误:与内存有关的错误

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值