一、信号处理流程
二、常见的信号:
SIGKILL:杀死进程
SIGSTOP:暂停进程
SIGCHLD:子进程停止或结束时用来通知父进程
三、常见的信号函数
1.kill 向一个进程发送信号
int kill(pid_t pid,int sig)
pid:
pid>0 : 指向要接收信号的进程
sig:指明要发送的信号
2.signal 设置信号的处理方式
typedef void (*sighandler_t)(int); // sighandler_t
是一个函数,这个函数的返回类型为void ,函数一个参数为int
sighandler_t signal(int signum, sighandler_t handler);
参数:
signum:要处理的信号
handler:对应信号的处理方式,可以取值
SIG_IGN:忽视这个信号,不处理
SIG_DEL:交给内核来处理
交给用户自定义的函数来处理
三、信号综合实例
aprocess.c
#include<signal.h>
#include<sys/types.h>
#include<stdio.h>
void main(int argc,char *argv[])
{
pid_t pid;
pid=atoi(argv[1]);
kill(pid,SIGINT);
}
bprocess.c
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
void myfunc(int a)
{
printf("Process B received SIGINT\n");
}
void main()
{
signal(SIGINT,myfunc);
pause(); //等待信号
}
操作步骤:
1.线运行 b 进程 ./bprocess 进程处于等待信号的状态
2.使用命令 ps aux 查看 b 进程的进程号
3.运行 a 进程 ./aprocess b进程进程号
一、信号处理流程
二、常见的信号:
SIGKILL:杀死进程
SIGSTOP:暂停进程
SIGCHLD:子进程停止或结束时用来通知父进程
三、常见的信号函数
1.kill 向一个进程发送信号
int kill(pid_t pid,int sig)
pid:
pid>0 : 指向要接收信号的进程
sig:指明要发送的信号
2.signal 设置信号的处理方式
typedef void (*sighandler_t)(int); // sighandler_t
是一个函数,这个函数的返回类型为void ,函数一个参数为int
sighandler_t signal(int signum, sighandler_t handler);
参数:
signum:要处理的信号
handler:对应信号的处理方式,可以取值
SIG_IGN:忽视这个信号,不处理
SIG_DEL:交给内核来处理
交给用户自定义的函数来处理
三、信号综合实例
aprocess.c
#include<signal.h>
#include<sys/types.h>
#include<stdio.h>
void main(int argc,char *argv[])
{
pid_t pid;
pid=atoi(argv[1]);
kill(pid,SIGINT);
}
bprocess.c
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
void myfunc(int a)
{
printf("Process B received SIGINT\n");
}
void main()
{
signal(SIGINT,myfunc);
pause(); //等待信号
}
操作步骤:
1.线运行 b 进程 ./bprocess 进程处于等待信号的状态
2.使用命令 ps aux 查看 b 进程的进程号
3.运行 a 进程 ./aprocess b进程进程号