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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue时间日期格式化

    vue时间日期格式化//对Date的扩展,将Date转化为指定格式的String//例子://(newDate()).Format("yyyy-MM-ddhh:mm:ss.S")==&gt;2006-07-0208:09:04.423//(newDate()).Format("yyyy-M-dh:m:s…

    2022年5月23日
    39
  • 软件测试的一点知识[1]

    软件测试的一点知识[1]

    2021年8月1日
    51
  • Redhat linux 命令行设置IP「建议收藏」

    Redhat linux 命令行设置IP「建议收藏」redhatlinux版本命令行设置IP ifconfigeth0NewIP然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip一、修改IP地址  [root@server/]$vi/etc/sysconfig/network-scripts/ifcfg-eth0  DEVICE=eth0  ONBOOT=yes  B…

    2022年5月7日
    39
  • shell循环生成连续日期

    shell循环生成连续日期1,给定长度,循环生成日期begin_day=-5end_day=0for((i=${begin_day};i<=${end_day};i++));do day=`date-d”${i}days”+”%Y%m%d”` echo${day}done输出为:2020082520200826202008272020082820200829202008302,给定开始日期和结束日期,循环生成日期。begin_day=”20200801″end_day=”2020

    2022年7月24日
    4
  • critic法计算_基于CRITIC法和变异系数法的导线网测量平差定权 2[通俗易懂]

    critic法计算_基于CRITIC法和变异系数法的导线网测量平差定权 2[通俗易懂]基于CRITIC法和变异系数法的导线网测量平差定权杨腾飞,施昆,汪奇生(昆明理工大学国土资源工程学院,云南昆明650093)【摘要】CRITIC与变异系数定权都是一种客观的定权方法,能克服常规经验定权的不足。本文将这两种客观定权方法引入导线网平差中,并与常规定权方法进行比较。由应用实例可验证其优越性。【关键词】客观定权;导线网;CRITIC;变异系数【中图分类号】【文献标识码】【文章编号】Trav…

    2022年5月24日
    38
  • 磁盘在磁盘管理中显示没有初始化找回文件方案「建议收藏」

    磁盘在磁盘管理中显示没有初始化找回文件方案「建议收藏」磁盘没有初始化是因为0号扇区损坏,导致机械硬盘分区表读取不出来,从而机械硬盘出现磁盘没有初始化。工具/软件:极限数据恢复软件步骤1:程序打开后,直接双击需要恢复数据的物理盘。步骤2:等待程序扫描完毕大概需要几分钟到半个小时,稍微耐心等下即可。步骤3:软件扫描到资料后,软件会将扫描到的分区列出来。步骤4:勾上所有需要恢复的资料,右击选择《复制勾选的文件》,…

    2022年9月21日
    0

发表回复

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

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