zoukankan      html  css  js  c++  java
  • Linux下的信号学习

    参考:http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html

    有这么一个程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <syslog.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/time.h> 
    

      

    int sec; 
    
    void sigroutine(int signo) { 
    switch (signo) { 
    	case SIGALRM: 
    		printf("Catch a signal -- SIGALRM ");
    		break; 
    	case SIGVTALRM: 
    		printf("Catch a signal -- SIGVTALRM "); 
    		break; 
    	} 
    	return; 
    } 
    
    int main() { 
    	struct itimerval value,ovalue,value2; 
    	sec = 5; 
    
    	printf("process id is %d ",getpid()); 
    	signal(SIGALRM, sigroutine); 
    	signal(SIGVTALRM, sigroutine); 
    
    	value.it_value.tv_sec = 1; 
    	value.it_value.tv_usec = 0; 
    	value.it_interval.tv_sec = 1; 
    	value.it_interval.tv_usec = 0; 
    	setitimer(ITIMER_REAL, &value, &ovalue); 
    
    	value2.it_value.tv_sec = 0; 
    	value2.it_value.tv_usec = 500000; 
    	value2.it_interval.tv_sec = 0; 
    	value2.it_interval.tv_usec = 500000; 
    	setitimer(ITIMER_VIRTUAL, &value2, &ovalue); 
    
    	for (;;) ; 
    } 
    

      如果你就这样在UBUNTU11.04里面运行,就会出现这样的情况:没有输出,等三十秒左右才有输出:

    然后我做了这样的改动之后就正常了:

    void sigroutine(int signo) { 
    switch (signo) { 
    	case SIGALRM: 
    		printf("
    Catch a signal -- SIGALRM ");
    		break; 
    	case SIGVTALRM: 
    		printf("
    Catch a signal -- SIGVTALRM "); 
    		break; 
    	} 
    	return; 
    } 
    

      

    可能是因为输出一个回车符到标准输出消耗了一定的CPU资源,间接的给了系统一个延时。(猜的,求指正~)

  • 相关阅读:
    最近有点烦
    好累啊
    几招有效防电脑辐射
    发两张搞笑图片
    几招有效防电脑辐射
    English Study
    人脸识别方法(转载)
    小常识
    23、C++ Primer 4th 笔记,面向对象编程(1)
    18、C++ Primer 4th 笔记,复制控制
  • 原文地址:https://www.cnblogs.com/yinsua/p/3214273.html
Copyright © 2011-2022 走看看