linux的sleep「建议收藏」

linux的sleep「建议收藏」linux的sleep函数会阻塞当前主线程几秒钟但是这个sleep不产生SIGALRM信号通过下例可得#include<stdio.h>#include<stdlib.h>#include<sys/time.h>#include<signal.h>#include<sys/select.h>#include&…

大家好,又见面了,我是你们的朋友全栈君。

linux的sleep函数会阻塞当前主线程几秒钟 但是这个sleep不产生SIGALRM 信号 通过下例可得
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
#include<sys/select.h>
#include<memory.h>
struct itimerval setvalue;
void RST(int sig)
{

if(sig==SIGALRM)
{

setvalue.it_value=setvalue.it_interval;
printf(“int hello\n”);
}
}
int main(void)
{

memset(&setvalue,0,sizeof(setvalue));
setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=3;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_REAL,&setvalue,NULL);

setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=3;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_VIRTUAL,&setvalue,NULL);
signal(SIGALRM,RST);
setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=1;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_PROF,&setvalue,NULL);
struct timeval t;
t.tv_sec=1;
t.tv_usec=0;
while(1)
{
	struct itimerval value;
	getitimer(ITIMER_REAL,&value);
	printf("ITIMER_REAL: internal:%lds%ldms,remain:%lds%ldms\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);

	getitimer(ITIMER_VIRTUAL,&value);
	printf("ITIMER_VIRTUAL:internal:%lds%ldms,remain:%lds%ldms\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);

	getitimer(ITIMER_PROF,&value);
	printf("ITIMER_PROF: internal:%lds%ldms,remain:%lds%ldms\n\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);
	sleep(1);
}

}
从这个例子内 我测试得到 内核不会自动给ITIMER_REAL的it_value的值重新赋值it_interval 所以我在每次it_value递减到0的时候进行设定一个CALLBACK函数进行自动设定it_value 有时候程序自动退出的原因就是SIGALRM的缺省处理的结果 我们需要自己手动设定一个信号接收后的处理比如SIG_IGN 忽略信号 SIG_DEF恢复系统默认处理方式 这里我声明SIGALRM的默认处理方式是会中断当前进程的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160496.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RAID0、RAID1及RAID5的区别详解

    RAID0、RAID1及RAID5的区别详解目前已有的RAID(RedundantArrayofIndependentDisks,独立冗余磁盘阵列)技术有很多种,但是RAID0、RAID1、RAID5是最常见的几种方案。1、RAID0RAID0技术把多块(至少两块)物理硬盘设备通过软件或硬件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样,在最理想的情况下,硬盘设备的读写性能会提升数倍,但是若任意一…

    2022年7月25日
    20
  • git push到远程指定分支(git拉取指定分支代码)

    一、pull操作1、将远程指定分支拉取到本地指定分支上:gitpull&lt;远程仓库名&gt;&lt;远程分支名&gt;:&lt;本地分支名&gt;2、将远程指定分支拉取到本地当前分支上:gitpull&lt;远程仓库名&gt;&lt;远程分支名&gt;3、将与本地当前分支同名的远程分支拉取到本地当前分支上gitpull&lt;远程仓库名&…

    2022年4月18日
    4.5K
  • 2013-2019年百度搜索算法规则解读与应对

    2013-2019年百度搜索算法规则解读与应对2013-2019年百度搜索算法规则解读影响与建议百度冰桶算法百度冰桶算法1.0——》算法自2014年8月30日上线  主要打击移动端网站强行用户下载APP、用户登陆才能继续使用和大面积的广告覆盖行为,影响用户的浏览体验,尤其以必须下载app才能正常使用的站点。百度冰桶算法2.0——-》算法自2014年11月18日上线  主要打击移动端手机广告遮挡屏幕浏览,…

    2022年5月17日
    44
  • vue v-if 多条件_vue vnode

    vue v-if 多条件_vue vnodev-if在模板中,可以根据条件进行渲染。条件用到的是v-if、v-else-if以及v-else来组合实现的。示例代码如下:<divid="app"><p

    2022年8月7日
    9
  • vue-cli-service serve报错_token怎么获取

    vue-cli-service serve报错_token怎么获取前端调试使用node环境调试代码时,返回token无效,线上环境和其他浏览器都没有错误解决方案:打开chrome输入chrome://flags/搜索SameSitebydefaultcookies找到SameSitebydefaultcookies和CookieswithoutSameSitemustbesecure将两个都设置成disable参考:https://www.cnblogs.com/yuan31415/p/13745139.html原因Chrome5

    2025年11月3日
    5
  • 推荐好用的Linux远程连接工具

    推荐好用的Linux远程连接工具在连接 linux 的时候用了很多工具 XshellSecure 还有很多其他的其中 XshellSecure 都不是免费的 当然有办法激活成功教程 这个在网上一大堆 就不再说了 putty 非常轻量级也很好用 也是最常用的 但是我在此推荐两款更好用的 国产的 FinalShell 和 MobaXterm 一 FinalShell 网址 http www hostbuf com 这个软件很强大可以实时查看 c

    2025年9月1日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号