博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SIGPROF和SIGALRM使用总结
阅读量:4495 次
发布时间:2019-06-08

本文共 3969 字,大约阅读时间需要 13 分钟。

      这几天,被公司的两个模块的程序好好的搞了一下,开始以为是SHELL的问题,仔细研究了以下,原来没有想象的那么复杂!!!
      关键在使用的信号SIGALRM 上,两个进程都用可SIGALRM 信号,一个进程在处理函数上启动了另一个进程,导致发给被启动进程的SIGALRM 被屏蔽掉了,最后的结果是被启动进程不能正常运行!!!!
     查了查书,发现还有个SIGPROF,呵呵.打算用SIGPROF来作为一个进程的信号,先写个测试程序看看管不管用

sigprof.c代码如下:#include 
#include
#include
#include
#include
void prompt_info(int signo){printf("can i be called!!!\n");system("./test");}void init_sigaction(void){struct sigaction act;act.sa_handler=prompt_info;act.sa_flags=0;sigemptyset(&act.sa_mask);sigaction(SIGPROF,&act,NULL);}void init_time(){struct itimerval value;value.it_value.tv_sec=2;value.it_value.tv_usec=0;value.it_interval=value.it_value;setitimer(ITIMER_PROF,&value,NULL);}int main(){init_sigaction();init_time();while(1);exit(0);}在RED HAT 9.0下编译gcc -o sigprof sigprof.ctest.c的代码如下:#include
#include
#include
#include
#include
void prompt_info(){ //system("./sigprof"); printf("this is a test!!!!!!\n");}void init_sigaction(void){struct sigaction act;act.sa_handler=prompt_info;act.sa_flags=0;sigemptyset(&act.sa_mask);sigaction(SIGALRM,&act,NULL);}void init_time(){struct itimerval value;value.it_value.tv_sec=20;value.it_value.tv_usec=0;value.it_interval=value.it_value;setitimer(ITIMER_REAL,&value,NULL);}int main(){init_sigaction();init_time();while(1);exit(0);}在RED HAT 9.0下编译gcc -o test test.c运行./sigprof结果如下:can i be called!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!this is a test!!!!!!看来信号还是被屏蔽掉了!!!! 两者的关系对调一下: sigprof.c代码如下:#include
#include
#include
#include
#include
void prompt_info(int signo){printf("can i be called!!!\n");//system("./test");}void init_sigaction(void){struct sigaction act;act.sa_handler=prompt_info;act.sa_flags=0;sigemptyset(&act.sa_mask);sigaction(SIGPROF,&act,NULL);}void init_time(){struct itimerval value;value.it_value.tv_sec=2;value.it_value.tv_usec=0;value.it_interval=value.it_value;setitimer(ITIMER_PROF,&value,NULL);}int main(){init_sigaction();init_time();while(1);exit(0);}在RED HAT 9.0下编译gcc -o sigprof sigprof.ctest.c的代码如下:#include
#include
#include
#include
#include
void prompt_info(){ system("./sigprof"); printf("this is a test!!!!!!\n");}void init_sigaction(void){struct sigaction act;act.sa_handler=prompt_info;act.sa_flags=0;sigemptyset(&act.sa_mask);sigaction(SIGALRM,&act,NULL);}void init_time(){struct itimerval value;value.it_value.tv_sec=20;value.it_value.tv_usec=0;value.it_interval=value.it_value;setitimer(ITIMER_REAL,&value,NULL);}int main(){init_sigaction();init_time();while(1);exit(0);}在RED HAT 9.0下编译gcc -o test test.c运行./testcan i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!can i be called!!!还是失败!!!!!!换个思维,不在处理函数启动另一个进程#include
#include
#include
#include
#include
int i=0;void prompt_info(){ i++; //system("./sigprof"); printf("this is a test!!!!!!\n");}void init_sigaction(void){struct sigaction act;act.sa_handler=prompt_info;act.sa_flags=0;sigemptyset(&act.sa_mask);sigaction(SIGALRM,&act,NULL);}void init_time(){struct itimerval value;value.it_value.tv_sec=2;value.it_value.tv_usec=0;value.it_interval=value.it_value;setitimer(ITIMER_REAL,&value,NULL);}int main(){init_sigaction();init_time();while(1){ if(i==1) system("./sigprof");};exit(0);}在RED HAT 9.0下编译gcc -o test test.c运行./test结果:this is a test!!!!!!this is a test!!!!!!can i be called!!!this is a test!!!!!!can i be called!!!this is a test!!!!!!can i be called!!!this is a test!!!!!!can i be called!!!this is a test!!!!!!can i be called!!!this is a test!!!!!!can i be called!!!this is a test!!!!!! OK达到想要的目的!!问题解决!!!!

转载于:https://www.cnblogs.com/roger0212/p/4436735.html

你可能感兴趣的文章
微信公众号开发模式开启总结
查看>>
pygame-KidsCanCode系列jumpy-part2-加速度与摩擦力
查看>>
[elk]logstash的grok匹配逻辑grok+date+mutate
查看>>
准备Android面试
查看>>
界面与后台逻辑完全分离,单例模式,接口
查看>>
redis安装及测试
查看>>
38-系统标准模块与第三方模块(1)
查看>>
[转]Android U 盘功能实现和分析
查看>>
dedecms织梦副栏目名称和链接调用
查看>>
iOS 离屏渲染学习笔记
查看>>
iOS Xib布局某些控件显示或隐藏<约束的修改>
查看>>
软件工程第一次作业
查看>>
乘法逆元+模的运算规则
查看>>
.net 实现微信公众平台的主动推送信息
查看>>
线程池ThreadPool详解
查看>>
宝石TD迷宫设计器
查看>>
DOM对象和JQuery对象的区别
查看>>
vue脚手架安装笔记
查看>>
P2146 [NOI2015]软件包管理器
查看>>
像素与DPI之间的关系
查看>>