一、信号类型
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.