[linux] C语言Linux系统编程-捕获进程信号
2017-12-15 23:02
489 查看
typedef void( *sighandler_t)(int);
1.用typedef给类型起一个别名。
2.为函数指针类型定义别名,
3.函数指针(指向函数的指针)
sighandler_t signal(int signum, sighandler_t handler);
1.函数原型
2.使用自定义的类型别名,作为函数参数和函数返回值
3.第一个参数是信号的标号,第二个参数是函数指针
implicit-function-declaration(不明函数声明)
sleep()函数在#include<unistd.h>这个头文件中
运行结果:
信号2是我ctrl+c , 信号15是我kill 进程id , 但是当我kill -9 进程id时 , 使用signal(SIGKILL,handler) 信号不能被捕获
进程运行中...
进程运行中...
进程运行中...
^C捕获到信号 2
进程运行中...
进程运行中...
进程运行中...
捕获到信号 15
1.用typedef给类型起一个别名。
2.为函数指针类型定义别名,
3.函数指针(指向函数的指针)
sighandler_t signal(int signum, sighandler_t handler);
1.函数原型
2.使用自定义的类型别名,作为函数参数和函数返回值
3.第一个参数是信号的标号,第二个参数是函数指针
implicit-function-declaration(不明函数声明)
sleep()函数在#include<unistd.h>这个头文件中
#include <stdio.h> #include <signal.h> #include<unistd.h> //申明一个自定义函数 void myHandler(int signum){ printf("捕获到信号 %d \n",signum); } int main(){ //定义一个函数指针,指向上面的函数 void(* handler)=myHandler; //调用函数,传递参数int信号标号,传递函数指针 signal(SIGINT,handler);//捕获ctrl+c signal(SIGTERM,handler);//捕获程序退出 while(1){ printf("进程运行中...\n"); sleep(1); } }
运行结果:
信号2是我ctrl+c , 信号15是我kill 进程id , 但是当我kill -9 进程id时 , 使用signal(SIGKILL,handler) 信号不能被捕获
进程运行中...
进程运行中...
进程运行中...
^C捕获到信号 2
进程运行中...
进程运行中...
进程运行中...
捕获到信号 15
相关文章推荐
- [linux] C语言Linux系统编程-做成守护进程
- [编程] C语言Linux系统编程-等待终止的子进程(僵死进程)
- [Linux]C语言Linux系统编程创建进程
- [linux] C语言Linux系统编程进程基本概念
- 【Linux系统编程】特殊进程之孤儿进程
- Linux系统编程——进程的控制:结束进程、等待进程结束
- linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用
- Linux系统编程--进程
- Linux c/c++后端编程,信号量,屏蔽和不屏蔽,信号捕获;
- Linux服务器编程——Linux系统编程之进程
- linux系统编程之信号(六):竞态条件与sigsuspend函数
- 利用c语言编程在stm32上输出信号控制电压放大与滤波系统和显示功能
- linux系统编程:进程控制(fork)
- [linux系统编程]System V IPC 信号量做进程间互斥
- linux 系统编程-学习笔记7-进程/fork/vfork/exec函数族
- 【Linux系统编程】特殊进程之守护进程
- Linux系统进程控制编程(六)——wait和waitpid函数
- linux系统编程之进程(四)
- linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数(转载)
- 九、Linux系统编程-进程(二)fork系统调用、复制进程映像、写时复制、孤儿进程和僵尸进程