Linux 信号通讯编程

一、信号类型

1、SIGKILL:杀死进程

2、SIGSTOP:暂停进程

3、SIGCHLD:子进程停止或结束时用来通知父进程

二、函数学习

1、发送信号:kill,向进程发送信号

1)函数原型

int kill(pid_t pid, int sig);

2)所属头文件

#include <sys/types.h>

#include <signal.h>

3)返回值

成功: 0

失败: -1

4)参数说明

pid: 当pid > 0, 接收信号的进程号

sig: 要发送的信号

[cpp]  view plain  copy
  1. /* send_sig.c */  
  2.   
  3. #include <sys/types.h>  
  4. #include <signal.h>  
  5. #include <stdlib.h>  
  6.   
  7. void main(int arvc, char* argv[])  
  8. {  
  9.     pid_t pid = 0;  
  10.   
  11.     pid = atoi(argv[1]);  
  12.   
  13.     kill(pid, SIGINT);  
  14.   
  15.     puts("Signal was sent.");  
  16. }  

2、处理信号:signal, 设置信号的处理方式

1)函数原型

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

2)所属头文件

#include <signal.h>

3)返回值

成功: 返回处理函数的指针

失败: SIG_ERR

4)参数说明

signum: 要处理的信号

handler: 对应信号的处理方式

* SIG_IGN: 忽略(ignore)

* SIG_DEF: 交给内核处理

* 用户自定义函数: 交给用户自定义函数处理

[cpp]  view plain  copy
  1. /* read_sig.c */  
  2.   
  3. #include <signal.h>  
  4. #include <unistd.h>  
  5. #include <stdio.h>  
  6.   
  7. void myfunc(int num)  
  8. {  
  9.     puts("Process sd_proc received SIGINT.");  
  10. }  
  11.   
  12. void main()  
  13. {  
  14.     signal(SIGINT, myfunc);  
  15.   
  16.     pause();  
  17. }  


运行结果

* 命令: ps -e 查看进程read_sig的pid, 然后用send_sig发送信号给这个pid.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值