信号:
信号处理流程:
信号类型:
6.1发送信号
6.1.1 函数名
kill
6.1.2 函数原形
int kill(pid_t pid,int sig)
6.1.3 函数功能
向进程发送信号
6.1.4 所属头文件
#include<sys/types.h>
#include<signal.h>
6.1.5 返回值
成功:0
失败:-1
6.1.6 参数说明
pid: pid>0,pid参数执行接收信号的进程
详细解释:点击打开链接sig:指明要发送的信号
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 所属头文件
#include<signal.h>
6.2.5 返回值
成功:返回处理函数指针
失败:返回SIG_ERR
6.2.6 参数说明
signum: 要处理的信号
handler: 对应信号的处理方式,可以取值
SIG_IGN:忽视这个信号(不处理)
SIG_DFL:交给内核来处理
用户自定义的函数:交给用户自定义的函数来处理
测试:
bprocess.c文件:
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
void myfunc(int a)
{
printf("process S received SIGINT\n");
}
int main(void)
{
signal(SIGINT,myfunc);
/*wait */
pause();
return 0;
}
aprocess.c文件:
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
pid_t pid;
/*atoi() string -> int*/
pid = atoi(argv[1]);
kill(pid,SIGINT);
return 0;
}
先运行bprocess进程,然后查看bprocess进程号,
根据进程号执行aprocess,如下: