标签:raise alarm signo handler sig 信号 include signal
信号发送
kill 和 raise函数
kill函数参数详解:
实验1 raise和kill 的使用
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait.h> //定义信号处理函数 //signo: 进程捕获到的信号 void sig_handler(int signo){ printf("%d, %d occured \n", getpid(), signo); wait(NULL); } int main(void) { pid_t pid; if(signal(SIGUSR1, sig_handler) == SIG_ERR){ perror("signal error"); } if(signal(SIGUSR2, sig_handler) == SIG_ERR){ perror("signal error"); } sleep(1); printf("向进程自己发送SIGUSR1 和 SIGUSR2 .\n"); raise(SIGUSR1); kill(getpid(), SIGUSR2); while(1){ sleep(1); } }
编译运行:
结论1.1:raise(SIGUSR1) 等价于 kill(getpid(), SIGUSR2)
结论1.2: 进程可以向自己发送信号
实验2 进程能够自杀吗?
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait.h> //定义信号处理函数 //signo: 进程捕获到的信号 void sig_handler(int signo){ printf("%d, %d occured \n", getpid(), signo); wait(NULL); } int main(void) { pid_t pid; if(signal(SIGUSR1, sig_handler) == SIG_ERR){ perror("signal error"); } if(signal(SIGUSR2, sig_handler) == SIG_ERR){ perror("signal error"); } sleep(1); printf("进程能够自杀吗?\n"); raise(SIGKILL); while(1){ sleep(1); } }
编译运行:
结论: 进程可以通过发送9号信号杀死自己
定时器 alarm 和 ualarm
实验3 alarm使用
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait.h> //定义信号处理函数 //signo: 进程捕获到的信号 void sig_handler(int signo){ if(signo == SIGALRM){ printf("clock time out \n"); //需要重新设置定时器,使之成为一个周期性触发的定时器 if(0 != alarm(5)){ perror("alarm:5 error"); } } } int main(void) { pid_t pid; int cnt=0; if(signal(SIGALRM, sig_handler) == SIG_ERR){ perror("signal error"); } if(0 != alarm(5)){ perror("alarm:5 error"); } while(1){ printf("main -- 1s -- \n"); sleep(1); if((cnt++) == 13) alarm(0); } return 0; }
编译运行:
ualarm:微妙级别的定时器,精读比alarm高
.
标签:raise,alarm,signo,handler,sig,信号,include,signal 来源: https://www.cnblogs.com/happybirthdaytoyou/p/14617425.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。