mysleep函数linux,Linux下实现mysleep并分析

对于这个问题,我们首先可以想到的是使用pause()函数和alarm()函数进行组合,这样就可以实现sleep函数的作用。

首先来看pause函数的作用

20200511100800647259.png

接着来看SIGALRM信号(man 7 signal):

20200511100800944145.png

由此我们可以看到SIGALRM默认的Action是Term。

20200511100801036922.png

而Term的默认动作是终止进程。

所以我们可以做如下实验,当我们没有信号捕捉的时候会发生什么样的情况?

20200511100801116027.png

运行结果:

20200511100801222476.png

此时并没有输出“after pause”,在程序执行的过程中,遇到pause程序被挂起之后,当2s之后,发来SIGALRM信号,由于没有重写SIGALRM信号的处理函数,所以系统默认终止该进程。

我们再来看看,当有默认处理函数的时候:

20200511100801285955.png

执行结果:

20200511100802021335.png

这个时候可以看到,我们想要看到的效果成功了。

在尝试一下其他方法(使用kill命令来发送SIGALRM信号):

20200511100802098486.png

执行kill命令:

20200511100802299666.png

运行结果:

20200511100803472563.png

这个过程也就十分的清晰明了了,当然这里并没有使用比较复杂代码和深层次的探究。

如果有错误,还请指正。

源码:

1 #include

2 #include

3 intmain()4 {5 alarm(2);6 printf("alarm start!\n");7 pause();8 printf("after pause!\n");9 }

1 #include

2 #include

3 #include

4 void fun(intid){5 printf("this is function \n");6 }7 intmain()8 {9 signal(SIGALRM,fun);10 alarm(2);11 printf("alarm start!\n");12 pause();13 printf("after pause!\n");14 }

参考链接:

原文:https://www.cnblogs.com/jianmoxiansheng-Guo/p/12867248.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值