• Linux 信号 alarm函数 setitimer函数


    1. /*
    2. #include <unistd.h>
    3. unsigned int alarm(unsigned int seconds);
    4. 功能:设置定时器。函数调用,开始倒计时,0的时候给当前的进程发送SIGALARM信号
    5. 参数:倒计时的时长。。单位:秒 如果参数为0,无效
    6. 返回值:倒计时剩余的时长
    7. -之前没有定时器,返回0
    8. -之前有定时器,返回之前的定时器剩余的时间
    9. SIGALARM:默认终止当前的进程,每一个进程有且仅有唯一的定时器
    10. 函数不阻塞
    11. */
    12. #include<stdio.h>
    13. #include<unistd.h>
    14. int main() {
    15. int second = alarm(5);
    16. printf("seconds = %d\n", second);
    17. sleep(2);
    18. second = alarm(2);
    19. printf("seconds = %d\n", second);
    20. while(1){
    21. }
    22. return 0;
    23. }

    后面新设的定时器会取代老的定时器

    定时与进程的状态无关,无论进程是阻塞,挂起,就绪,运行定时器都是自己玩自己的

    setitimer函数

    1. /*
    2. #include <sys/time.h>
    3. int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
    4. 功能:设置定时器(闹钟)。可以替代alarm函数。精度微秒,可以实现周期性的定时。
    5. 参数:
    6. -which:定时器以什么方式计时
    7. -ITIMER_REAL:真实时间,时间到达,发送SIGALRM 常用
    8. -ITIMER_VIRTUAL:用户时间,时间到达,发送SIGVTALRM
    9. -ITIMER_PROF:一该进程在用户态和内核态下所消耗的时间来计算,时间到达,发送SIGPROF信号
    10. -new_value:设置定时器的属性
    11. struct itimerval {
    12. struct timeval it_interval; 每个阶段的倒计时时长
    13. struct timeval it_value; 延迟多长时间执行定时器
    14. };
    15. struct timeval {
    16. time_t tv_sec; 秒数
    17. suseconds_t tv_usec; 微秒
    18. };
    19. -old_value:记录上次定时的时间参数
    20. 返回值:成功0 失败-1
    21. */
    22. #include <sys/time.h>
    23. #include<stdio.h>
    24. #include<unistd.h>
    25. int main() {
    26. struct itimerval new_value;
    27. new_value.it_interval.tv_sec = 2;
    28. new_value.it_interval.tv_usec = 0;
    29. new_value.it_value.tv_sec = 3;
    30. new_value.it_value.tv_usec = 0;
    31. int ret = setitimer(ITIMER_REAL, &new_value, NULL);
    32. printf("开始\n");
    33. if(ret == -1) {
    34. perror("ret");
    35. return 0;
    36. }
    37. while(1) {
    38. printf("1\n");
    39. sleep(1);
    40. }
    41. return 0;
    42. }

    延迟三秒开始执行就会立马发送信号,然后每隔两秒发送一次

  • 相关阅读:
    解决java.io.IOException: Broken pipe的报错
    cookie
    python学习(一) 列表,元组,字典,集合的区别
    W、X、Y
    OpenAI内斗剧情反转!微软力保ChatGPT之父回归?
    华为交换机常用命令
    Java面试干货:关于数组查找的几个常用实现算法
    C++多线程入门
    ubuntu中查看进程并结束进程以查看资源占用命令
    《前端运维》一、Linux基础--04Shell变量
  • 原文地址:https://blog.csdn.net/weixin_44273624/article/details/132988262