一、信号:在Linux系统中,信号(signal)同样也是最为古老的进程
间通信机制。
二、信号处理流程:①选择信号②发送信号③处理信号
三、信号类型:Linux系统支持的所有信号均定义在
/usr/include/asm/signal.h(展示),其中常见的信号有:
-
-
SIGKILL: 杀死进程
-
SIGSTOP:暂停进程
-
SIGCHLD:子进程停止或结束时用来通知父进程
四、函数学习:
6.1 发送信号
6.1.1 函数名
Kill
6.1.2 函数原形
Int kill(pid_t pid, int sig);
6.1.3 函数功能
发送信号给进程
6.1.4 所属头文件
6.1.5 返回值
成功:0 失败:-1
6.1.6 参数说明
Pid:>0接收进程ID,0发送给所有进程组的进程。-1,发送给所有有发送权限的进程ID除了init进程。<-1,发送给所有进程组的-pid的进程。
Sig:要发送的信号,0的话不发送,单确认error来确认是否有进程。
6.2 处理信号
6.2.1 函数名
Signal
6.2.2 函数原形
Typedef void (*sighandler_t)(int);
Sighandler_t signal(int signum, sighandler_t handler);
6.2.3 函数功能
设置信号处理方式
6.2.4 所属头文件
6.2.5 返回值
成功:返回函数处理之前的值 失败:SIG_ERR
6.2.6 参数说明
Signum:接收到的信号
Handler:对应信号的处理方式,可以取值
SIG_IGN:忽略这个信号(不处理)
SIG_DEL:交给内核处理
用户自定义的函数:交给用户自定义的函数来处理
a_signal.c:
-
#include <sys/types.h>
-
#include <signal.h>
-
#include <stdio.h>
-
-
void main(int argc, char *argv[])
-
{
-
pid_t pid;
-
if(argc < 1)
-
{
-
printf("usage:a_signal [pid]\n");
-
return;
-
}
-
pid = atoi(argv[1]);
-
kill(pid,SIGINT);
-
-
}
b_signal.c:
-
#include <signal.h>
-
#include <unistd.h>
-
-
typedef void (*sighandler_t)(int);
-
-
void myfunc(int a)
-
{
-
printf("Process B received SIGINT\n");
-
}
-
-
void main()
-
{
-
signal(SIGINT , myfunc);
-
pause();
-
}
阅读(489) | 评论(0) | 转发(0) |