【Linux】信号通讯编程

来源:互联网 发布:淘宝无名体育怎么样 编辑:程序博客网 时间:2024/05/16 18:54

一、信号类型

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: 要发送的信号


/* send_sig.c */#include <sys/types.h>#include <signal.h>#include <stdlib.h>void main(int arvc, char* argv[]){pid_t pid = 0;pid = atoi(argv[1]);kill(pid, SIGINT);puts("Signal was sent.");}



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: 交给内核处理

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


/* read_sig.c */#include <signal.h>#include <unistd.h>#include <stdio.h>void myfunc(int num){puts("Process sd_proc received SIGINT.");}void main(){signal(SIGINT, myfunc);pause();}


* 运行结果

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









0 0